Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Peticiones Get sucesivas (https://www.clubdelphi.com/foros/showthread.php?t=52500)

Sr_Sombrero 23-01-2008 04:05:01

Peticiones Get sucesivas
 
Hola! Estoy haciendo un programa que envía una lista a una web mediante Get aunque tal vez sería mejor usar POST, pero como la web la hace otro estoy tratando de ver si puedo hacer que funcione con GET antes de pedir que la cambie a método POST.

¿Es posible enviar varios GET sucesivos sin tener que reconectar? Me pasa que conecto, envio el GET con sendtext y si quiero enviar otro GET sin cerrar e iniciar una nueva conexión me sale error.

Código:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Button1.Caption = 'Conectar' then
    ClientSocket1.Active:= True;
  else
  if Button1.Caption = 'Desconectar' then
    ClientSocket1.Active:= False;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Button1.Caption:= 'Desconectar';
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Button1.Caption:= 'Conectar';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ClientSocket1.Socket.SendText(
  'GET http://lalala.com/add.php?lista=' + edit1.text + #13#10 +
  'HTTP/1.0' + #13#10 +
  'Accept: */*' + #13#10 +
  'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)' + #13#10 +
  'Host: ' + ClientSocket1.Host + #13#10 +
  'Pragma: no-cache'+#13#10#13#10);
end;


dec 23-01-2008 10:12:40

Hola,

Que me corrija alguien si estoy equivocado. Lo que ocurre es que una conexión HTTP no es "persistente". Es decir, se trata de conectar y enviar los datos que sean menester, volver a conectar y volver a enviar más datos. No hay forma de decirle al Servidor, hey, espera, no "desconectes" todavía que voy a enviarte más datos. Porque estos se procesan "de una vez", o no se procesan.

No se mantiene una comunicación, propiamente dicha, sino que tú envias una petición, y el servidor retorna una respuesta. Y ahí acaba todo. Si quieres volver a vértelas con el servidor has de enviar otra petición, para la que obtendrás una nueva respuesta. Habría que ver porqué te planteas "varias peticiones" a la vez. El asunto, probablemente, deba enforcarse de otra forma.

Sr_Sombrero 23-01-2008 13:42:28

Gracias dec, esa era justo mi duda.

Lo de enviar varias peticiones juntas, en vez de conectar y reconectar era para aliviar la carga del servidor. Por lo visto tendré que probar si se pone lento o enfocarlo de otra manera.

Saludos

seoane 23-01-2008 14:35:53

Prueba incluyendo este header dentro de tu petición:
Código:

Connection: Keep-Alive
Algo así:
Código PHP:

ClientSocket1.Socket.SendText(
  
'GET [url]http://lalala.com/add.php?lista=[/url]' edit1.text #13#10 +
  
'HTTP/1.0' #13#10 +
  
'Accept: */*' #13#10 +
  
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)' #13#10 +
  
'Host: ' ClientSocket1.Host #13#10 +
  
'Connection: Keep-Alive' #13#10 +
  
'Pragma: no-cache'+#13#10#13#10); 


dec 23-01-2008 15:11:21

Hola,

Domingo, ¿significa eso que estoy equivocado? Di lo que sea ya. :D ;)

seoane 23-01-2008 20:56:29

Si no estoy equivocado en la versión 1.1 del protocolo http se puede mantener la conexión abierta usando "keep-alive", otra cosa es que tanto el cliente como el servidor soporten esta característica y estén dispuestos a utilizarla. Un servidor esta en todo su derecho de responder a un "Connection: keep-alive" con un "Connection: Close", y se acabo lo que se daba :)

Pero metiéndonos ya en estos líos, yo le sugiero al Sr. Sombrero que se deje de sockets y utilice Indy, Wininet o alguna cosa similar, porque ellos mismos se encargaran de manejar la conexión y "mantenerla viva" si así se lo indicas, eso si, siempre que el servidor este de acuerdo.

Sr_Sombrero 24-01-2008 00:00:16

Gracias! :)

Probé con 'Connection: Keep-Alive' y me funciona. Lo de aprender a usar las INDY es una cuenta pendiente pero para este proyecto me alcanza con un socket comunacho.

Ante la primer respuesta pasamos a método POST, aunque no hacía falta, pero me vino bien porque ahora ya se usar tanto POST como GET.

Saludos


La franja horaria es GMT +2. Ahora son las 11:44:34.

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