PDA

Ver la Versión Completa : Gestionar una conexión de cliente con Indy10


xaguilars
05-11-2007, 14:34:44
Hola a todos, en clase estamos haciendo una práctica con Delphi 2006 en la que enviamos una petición HTTP a un servidor web por ejemplo con el comando GET. Toda la información de la petición está escrita en un TMemo (input) y la respuesta nos la tiene que escribir en otro TMemo (output).

Hemos usado el componente de Indy10 TIdTcpClient pero se nos cuelga la aplicación. Usamos el try {conectar y enviar peticion} finally {desconectar}
como se muestra aquí:

procedure TForm1.btGETClick(Sender: TObject);
var
i:integer;
begin
if edProtocol.Text='' then btInterprClick(Self); //separa las partes de la URL dada en un editbox, en editboxes
Input1.Lines.Add('GET '+edPath.text+' HTTP/1.1'+EOL+'Host: '+edHost.Text+EOL); //EOL=#13#10
//Conexión
Output1.Lines.Clear;
SckClient.Host:=edHost.Text;
SckClient.Port:=Port;
try
SckClient.Connect;
If sckclient.Connected then showmessage ('Conectado!');
for i := 0 to Input1.Lines.Count - 1 do
begin
SckCLient.IoHandler.Write(Input1.Lines[i]);
Output1.Lines.Add(SckClient.IoHandler.Readln);
end;
finally
SckClient.Disconnect;
end;
end;

Parece que conectarse se conecta porque muestra el showmessage, también parece que envía la petición (Write) porque con F7 pasa a la línea siguiente... que es donde se cuelga (freeze) sin dar ningún error.

Alguien sabe como solucionarlo? Gracias ;)

poliburro
05-11-2007, 15:38:11
si son peticiones a un webserver, yo les aconsejaría utilizar un cliente http (Yo me inclino por el componente WebBrouser), eso les va a ahorrar muchisimo trabajo.

El componente Webbrowser y el Indyhttp tienen implementados los métodos Get y post. Suerte

xaguilars
05-11-2007, 16:44:08
Hola muchas gracias. Lo he probado pero no encuentro la manera de conectar con el servidor. Cuando hago Idhttp1.Connect, me sale una excepción: EIDHostRequired. He probado poniendo el host y el port en Idhttp1.iohandler.host y en Idhttp1.iohandler.port pero no me deja asignarles nada.
Lo que básicamente queremos es sacar por un tmemo la respuesta del servidor en texto plano, la cabecera html y todo el body que venga después.

Muxas gracias

poliburro
05-11-2007, 16:53:46
más bien es

IdHttp1.Host = 'www.clubdelphi.com';
IdHttp1.Port = 80