FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Ayuda con incompatibilidad del Post de TIdHTTP de Indy 8 con Indy 10
Hola,
Tengo una aplicación con Delphi 4 e Indy 8. Estoy migrando a Delphi 2007 (Update 1), el cual trae Indy 10. El problema es que no funciona la llamada al método Post de TIdHTTP. Post es un método sobrecargado; pero solo estoy usando la llamada que en Indy 8 tenía la siguiente definición: procedure Post(URL: string; const Source: TStrings; const AResponseContent: TStream); La razón por la cual falla es que en la versión 10 está transformando el fin de línea (CR + NL) en un caracter &. De acuerdo al sistema de Ayuda, esa conversión es el comportamiento normal bajo Indy 10; pero no indica porque cambiaron el comportamiento que traían de Indy 8 (no sé si lo hicieron en Indy 9) ni como hacer para que el componente en Indy 10 emule el comportamiento de la versión 8; de hecho ni siquiera advierten de ese cambio. He intentado varias combinaciones con los parámetros de opciones de TIdHTTP; pero ninguna ha funcionado. Cambiar el servidor para que reconozca el & como equivalente a CR + NL no es una solución viable. La única solución que tengo hasta el momento es desmontar Indy 10 de Delphi 2007 e instalar Indy 8; pero quiero hacerlo solo como último recurso. Alguno podría indicarme una solución diferente ?. Más aún, alguién sabe si aparte de este problema hay otras diferencias entre las dos versiones que afecten el comportamiento de TIdHTTP y en tal caso como hacer para emular totalmente el comportamiento viejo ?. |
#2
|
|||
|
|||
Solución
Hola,
De antemano gracias a cualquiera que haya pensado una solución y si es diferente a la que acabo de encontrar, agradecería si pudiera compartirla. La solución que encontré fué usar un TStringStream en lugar de TStrings como parámetro de entrada. Es decir, usé la segunda forma del método sobrecargado Post, o sea : procedure Post(URL: string; const Source, AResponseContent: TStream); La conclusión es que, para mantener la compatibilidad, en Indy 8 debe usarse solo este método y no la otra versión del mismo. He hecho varias pruebas y al parecer está trabajando bien. De todas formas, si alguién conoce algunos otros puntos de incompatibilidad de versiones, o algo de las razones para el cambio hecho en Indy, mucho agradecería si los comentara aquí. Cita:
|
#3
|
|||
|
|||
Buenas! Estoy intentando crear una aplicacion para poder enviar correos electronicos através de delphi 4 y la verdad es que estoy un poco perdida, me he bajado la version 8 de los componentes Indy y creo que los he instalado, aunque no se si de forma correcta o no. Me gustaria que me echarais una mano y me indicarais como puedo empezar con el tema.
Un saludo! |
#4
|
|||
|
|||
Voy a averiguar y te comento
Cita:
Te cuento que no he tenido la oportunidad de usar Indy 8 con Delphi 4 para enviar correos; de hecho nunca he usado Indy para el envío de correos. El envío de correo lo he hecho sin inconvenientes con Delphi 5 y FastNet para correos internos (recuerdo haber leído algo de que FastNet tiene problemas para los externos). Lo curioso del caso es que hacerlo fué muy fácil; pero, posteriormente, cuando tuve problemas con FastNet para la conexión Web, fué cuando me enteré que FastNet tenía serios problemas en esa área y en consecuencia empecé a trabajar con Indy. Para estar homogeneo intenté pasar la parte de correo a Indy; pero lo encontré muy complicado con respecto a FastNet y me dió tantos problemas que opté por seguír usando FastNet para correo. En este momento estoy lidiando con un problema bastante complicado de registro de componentes en Delphi 2007; pero en cuanto me desocupe te prometo que miro a ver como es el envío desde Delphi 4 con Indy 8. Espero que a más tardar mañana en la noche te pueda decir algo al respecto Si mientras tanto alguién puede explicar algo sobre el tema, bienvenido sea. Saludos |
#5
|
|||
|
|||
Muchas gracia
Gracias por la rapidez, estoy avanzando algo pero me da errores que no tengo ni idea de como resolver, a ver si puedo encontrar algo de ayuda por ahi. Un saludo y suerte con tus problemillas!
|
#6
|
|||
|
|||
Lo que te he averiguado
Cita:
Como te prometí, aquí esta lo que he podido averiguarte hasta ahora: Los mensajes se envían mediante objetos del tipo TIdSMTP. Este es un componente Indy disponible en la paleta Indy Clients. Cada mensaje se almacena en objetos del tipo TIdMessage. Este es un componente Indy disponible en la paleta Indy Misc. Para definir el mensaje, las propiedades claves de TIdMessage son las siguientes: Body : Esta propiedad es un TStringList que almacena el texto del mensaje From : Esta propiedad es del tipo TIdEmailAddressItem, un tipo usado por Indy para definir direcciones. La prpoiedad indica el correo del que envía Subject : Es un string con el título o asunto del mensaje Recipients : Esta propiedad indica la lista de direcciones a donde se enviará el mensaje. Es del tipo TIdEmailAddressList, el cual es usado por Indy para manejar los TIdEmailAddressItem, Lógicamente hay más; pero estas son las básicas. El manejo de direcciones dado por TIdEmailAddressItem se maneja con 3 propiedades: Address : La dirección de correo en sí Name : El nombre asociado a esa dirección Text : El texto usado para desplegar direcciones, o se 'Name <Address>' Finalmente, el componente TIdSMTP se configura con base a 3 propiedades: Port : El número del puerto (por default 25) Host : La dirección IP o el nombre del servidor AutheticationType : Usa atNone si no requiere autenticar, o si es requerido, usa atLogin, suministrando además las credenciales en las propiedades UserId y Password Una vez definido lo anterior, hacer el envío requiere 3 métodos de TIdSMTP a. Llamar al método Connect para establecer la conexión b. Enviar el mensaje con el método Send c. Garantizar el fin de la conexión con el método Disconnect La siguiente rutina ilustra toda esta teoría: Coloco el puerto solo para ilustración, ya que el default es 25. Observa el uso de la variable ElDestinatario para agregar uno a uno, un par de destinarios a la lista dada por Recipients. Es de anotar que TIdEmailAddressItem está definido en la unidad IdEMailAddress, por tanto, debes agregarla a clausula Uses. El principal problema es determinar los parámetros correctos para las propiedades de TIdSMTP. Creo que ahí es donde estarán tús problemas. Bueno, espero que esto te ayude Saludos |
#7
|
|||
|
|||
Como te fué ?
Hola,
Te funcionó ?. Aunque ahora a mi me ha trabajado muy bien con Delphi 4, aquella ocasión en que lo hice por primera vez tuve muchos problemas; así que me gustaría saber de tús experiencias. |
#8
|
|||
|
|||
Si que me funciono, tuve unos problemas a la hora de autentificarme por que el servidor lo requiere, pero lo solucione. Muchisimas gracias por todo. Un saludo enorme!
|
#9
|
|||
|
|||
Me alegro
Cita:
De nada. Me alegro de haber podido ayudarte. A la orden para cualquier otra cosa. Muchos Saludos |
#10
|
|||
|
|||
Segun he leido creo que tiene algo que ver
Hola de nuevo, otra vez estoy por aqui, no se si estoy en lo cierto pero he leido algo por ahi y creo que tiene algo que ver.
Comienzo, estoy intentado añadir en una aplicacion echa en Delphi 4 la opcion de enviar SMS a moviles a través de internet, y he leido por ahi que con Indy se puede. Mientras me comentais algo sigo buscando como loca por internet a ver si doy con algo. Un saludo!! PD: El envio de mail va D.P.M!!! Gracias!!! |
#11
|
|||
|
|||
Voy a averiguar. Sugiero otro hilo
Cita:
La verdad nunca he hecho algo así con Delphi 4. Me dá curiosidad y yo también voy a averiguar. Esta noche lo haré y entonces compartiremos experiencia. Por otra parte, de acuerdo a la guía de estilo, este tema debería ir en un hilo diferente. Te sugiero abrirle uno, o si ya lo has hecho, envíame aquí un enlace al mismo. |
#12
|
|||
|
|||
Ok, dentro de la seccion Foros en la parte de Internet ya hay un hilo abierto con Enviar SMS, y postee por ahi. Colgue el ultimo post por aqui por que como expliqué lei en un sitio de internet que habia que utilizar algun componente Indy, espero que nadie lo tome a mal.
Un saludo! Ya hablamos por el otro hilo OK! |
#13
|
|||
|
|||
Hola, vuelvo a recuperar este hilo.
Resulta que yo también he tenido estos problemas de incompatibilidad. Estaba usando Delphi 6, y ahora trabajo sobre BStudio 2005 para Win32. Tengo un procedimiento para capturar páginas por HTTP, mediante GET o POST, y he usado los consejos que se detallan al principio de este post para adaptarlo a mi nuevo IDE. Resulta que no sé cómo hacer que los métodos GET o POST puedan aceptar una URL que venga en una variable. Tal y como en el ejemplo de código que adjunto estoy haciendo... Gracias y un saludo.
|
#14
|
|||
|
|||
Parece que lo he solucionado, usando una variable intermedia.
Gracias de todas maneras. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
ayuda Indy | hidal | C++ Builder | 1 | 27-08-2006 21:28:55 |
Ayuda con Indy | JerS | Varios | 1 | 07-10-2005 22:44:10 |
Ayuda con componentes Indy FTP | taita | Internet | 3 | 26-10-2004 11:09:45 |
Ayuda con las Indy por favor :'( | k4sp3r | Internet | 9 | 25-09-2004 21:37:55 |
Ayuda Indy | VolaRe | Internet | 1 | 14-09-2004 00:51:28 |
|