Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Llamada HTTP a una URL (https://www.clubdelphi.com/foros/showthread.php?t=56620)

URBANO 22-05-2008 08:07:42

Llamada HTTP a una URL
 
Hora foro, estoy realizando una aplicacion en delphi y necesito realizar una llamada HTTP a una URL con el metodo POST pasándole un parámetro llamado "XML". Y luego la URL, me devolverá un XML.

Es la primera vez que hago algo parecido y no se por donde empezar. Alguien podría orientarme. De que manera puedo hacer la llamada a la URL y enviarle el XML. Como obtengo el XML que me devuelve y de que manera puedo leer su contenido.

El formato del XML es algo parecido a esto:

<ROOT>
<AUTHENTICATION>
<LOGIN>gestorsms</LOGIN>
<PASSWORD>pwdgestor</PASSWORD>
</AUTHENTICATION>
<METHOD>enviar</METHOD>
<INPUT>
<BODY>texto</BODY>
</INPUT>
</ROOT>

Gracias de antemano por vuestra ayuda.

dec 22-05-2008 13:30:12

Hola,

Para el asunto del HTTP POST, puedes echar un vistazo a este truco (que usa WinInet) o a este otro truco que usa el componente IdHttp de los componentes Indy. Respecto de cómo "parsear" el XML que obtengas como respuesta, puedes buscar información sobre el componente "TXmlDocument", que igual te sirve.

URBANO 21-10-2008 07:38:18

Gracias dec, por tu comentario. Lo he seguido y he realizado el siguiente codigo para hacer la llamada a la URL.

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  http: TIdHttp;
  xml: TStrings;
  respuesta: string;
begin
  http := TIdHTTP.Create(Self);
  xml := TStringList.Create;
  try
    xml.text:='codigo xml';
    XML.text:=xml.text + 'mas codigo xml';
   respuesta := http.Post('www.mipagina.com', xml);
   ShowMessage('Respuesta: ' + respuesta);
  finally
    http.Free;
    XML.Free;
  end;

end;

Este codigo me funciona y hace el post a la URL, pero la URL me da un error indicando que las sintaxis del codigo xml que yo le envio no es la correcta.
Creo que el problema viene de que el parametro "xml" que yo envio es del tipo TStrings y la URL solo esta leyendo la primera linea, ya que espera un parametro de tipo string.
No puedo poner todo el codigo xml en la primera linea del Tstrings ya que tiene mas de 255 caracteres y a la hora de compilar delphi me da un error, indicando que el literal del Strings no puede superar 255 caracteres.



Sabría alguien de que manera puedo enviar dicho codigo xml, por medio del post, en un solo string.

Gracias y saludos.

chalao 21-10-2008 17:18:03

Yo tenía un problema parecido para mandar Html como un ansistring.

Échale un vistazo a este post donde lo preguntaba, a ver si te sirve:
http://www.clubdelphi.com/foros/showthread.php?t=60858

Un saludo.

URBANO 21-10-2008 18:21:37

Gracias, con tu comentario ya lo he solucionado.

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  http: TIdHttp;
  xml: TStrings;
  respuesta: string;
  datosPost: TIdMultiPartFormDataStream;
begin
  http := TIdHTTP.Create(Self);
  xml := TStringList.Create;
  datosPost := TIdMultiPartFormDataStream.Create;
  try
    xml.text:='codigo xml menos de 255 caracteres';
    XML.text:=xml.text + 'codigo xml menos de 255 caracteres';
    datosPost.AddFormField('xml', xml.text );
   respuesta := http.Post('http://www.miweb.es', datospost);
   ShowMessage('Respuesta: ' + respuesta);
  finally
    http.Free;
    XML.Free;
    datospost.free;
  end;

end;

Con este codigo me ha funcionado a la perfeccion. Pero ahora se plantea otro problema. En la variable "respuesta" el post almacena la respuesta de la URL. El contenido de respuesta es codigo xml y necesito poder moverme por sus etiquetas para capturar la información que me devuelve la URL y almacenarla en una tabla. Como puedo conseguir esto?

Os comento que estoy trabajando con Delphi 5.

Saludos y gracias.


La franja horaria es GMT +2. Ahora son las 09:28:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi