Форум: "Сети";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];
Вниз
Посылка запроса на удаленный сервер и получение ответа от него Найти похожие ветки
← →
q10nik (2007-05-30 16:09) [0]Добрый день, попал в весьма затруднительное положение:
имеется файл с http запросами на удаленный сервер,
пусть в примере сервеором будет 127,0,0,1:80
сам запрос, берется из базы
//RMessage:="GET "+Webpage+" HTTP/1.0"#10#10;
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket:TCustomWinSocket);
begin
Socket.SendText(RMessage);//отправляем запрос
end;
//-----------------------------------------------------
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
//выводим пришедший от сервера ответ в мемо
Memo1.Lines.Text := Memo1.Lines.Text + Socket.ReceiveText;
end;
//пытаемся отправить на сервер все запросы из базы запросов
//------------------------------
while not EOF(f) do
begin
Readln(f,RMessage);
ClientSocket1.Open;
ClientSocket1.Close;
end;
end;
closefile(f);
но таким образом получить ответы на все посылаемые запросы не получается - приходит ответ только на последний и то не всегда.
Подскажите пожалуйста, каким образом мне с наибольшей скоростью отправить все запросы (всего их около 2000) и получить на них ответы сервера...очень хочется обойти использование ClientSocket, а вместо него использовать что-нить поновее?
От сервера достаточно получить только код 200(Ок) или 404 или 400 и т.д.
← →
SlymRO © (2007-05-30 16:14) [1]
ClientSocket1.ClientType:=ctBlocking;
while not EOF(f) do
begin
Readln(f,RMessage);
try
ClientSocket1.Open;
Socket.SendText(RMessage);
Memo1.Lines.Add(Socket.ReceiveText);
finally
ClientSocket1.Close;
end;
end;
closefile(f);
← →
q10nik (2007-05-30 16:32) [2]Или я что-то делаю не так, почему мне ответы на запросы приходят пустыми??? хотя если отправлять только один запрос, то все рботает???
procedure TForm1.SpeedButton1Click(Sender: TObject);
var f:textfile;
begin
ClientSocket1.Host:=IPAdress.Text;
ClientSocket1.Port:=80;
assignfile(f,"base.db");
reset(f);
k:=0;
ClientSocket1.ClientType:=ctBlocking;
while not EOF(f) do
begin
Readln(f,RMessage);
try
ClientSocket1.Open;
Memo1.Lines.Add(ClientSocket1.Socket.ReceiveText);
finally
ClientSocket1.Close;
end;
end;
closefile(f);
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(ClientSocket1.Socket.ReceiveText);
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText(RMessage);
end;
← →
Сергей М. © (2007-05-30 16:39) [3]
> почему мне ответы на запросы приходят пустыми?
Потому что сервер не такой шустрый, как ты)
Ты отправил запрос и тут же желаешь получить ответ (см. ReceiveText).
← →
SlymRO © (2007-05-30 16:39) [4]ClientSocket1Read ненадо, ClientSocket1Connect тоже убери
procedure TForm1.SpeedButton1Click(Sender: TObject);
var f:textfile;
begin
ClientSocket1.Host:=IPAdress.Text;
ClientSocket1.Port:=80;
assignfile(f,"base.db");
reset(f);
k:=0;
ClientSocket1.ClientType:=ctBlocking;
while not EOF(f) do
begin
Readln(f,RMessage);
try
ClientSocket1.Open;
Socket.SendText(RMessage);
Memo1.Lines.Add(ClientSocket1.Socket.ReceiveText);
finally
ClientSocket1.Close;
end;
end;
closefile(f);
end;
← →
q10nik (2007-05-30 16:40) [5]и вообще возможно ли использовать для этой цели idTCPClient?
все мои попытки заставить его показать первую строку с ответом
HTTP/1.1 400 Bad Request или похожим на него не удались
т.е. из всего ответа сервера
HTTP/1.1 400 Bad Request
Date: Wed, 30 May 2007 12:39:26 GMT
Server: Apache/1.3.33 (Win32) PHP/4.4.4
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
1a7
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>400 Bad Request</TITLE>
</HEAD><BODY>
<H1>Bad Request</H1>
Your browser sent a request that this server could not understand.<P>
client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /index.html.es<P>
<HR>
<ADDRESS>Apache/1.3.33 Server at <A HREF="mailto:webmaster@localhost">non-existent-host</A> Port 80</ADDRESS>
</BODY></HTML>
до меня доходит все, кроме самой нужной первой строки...
← →
SlymRO © (2007-05-30 16:43) [6]http://delphimaster.net/view/6-1175272306/
← →
Сергей М. © (2007-05-30 16:48) [7]
> SlymRO © (30.05.07 16:39) [4]
Та же ошибка.
ReceiveText тут же вернет управление - это неблокирующий метод.
← →
Сергей М. © (2007-05-30 16:51) [8]Кр.того, ни в коем случае нельзя питать себя иллюзиями, что ReceiveText возвратит разом весь ответ сервера.
← →
SlymRO © (2007-05-30 16:54) [9]Сергей М. © (30.05.07 16:51) [8]
Это я вкурсе... не предлогать же бедолаге свой readln делать к сокету
← →
Сергей М. © (2007-05-30 16:59) [10]
> SlymRO © (30.05.07 16:54) [9]
В учебно-познавательных целях почему бы и нет ?
← →
q10nik (2007-05-30 17:00) [11]к сожалению на ДОМАШНЕМ сервере ни один из предложенных вариантов не работает, readln idTCPClient"a возвращает всторую и последующие строки
из сабджа SlymRO
begin
Client:=TIdTCPClient.Create;
try
Client.Connect("MyProxyHost",3128{MyProxyPort});
Client.IOHandler.WriteLn(format("CONNECT %s HTTP/1.0",["mail.mail.ru:110"]));
Client.IOHandler.WriteLn;
Create потребовал в параметр компонент!???
и у клиента нет метода Writeln, есть SendCMD, хотя с этим все ок...
возможноли посылать запрос и лишь когда на него получен ответ - посылать следующий?
← →
SlymRO © (2007-05-30 17:02) [12]q10nik (30.05.07 17:00) [11]
клиента нет метода Writeln
Client.IOHandler.WriteLn
← →
SlymRO © (2007-05-30 17:06) [13]ленивый да?
var
f:textfile;
Client:TIdTCPClient;
RMessage,s:string;
Code:integer;
begin
Client:=TIdTCPClient.Create;
try
Client.Host:=IPAdress.Text;
Client.Port:=80;
assignfile(f,"base.db");
reset(f);
k:=0;
while not EOF(f) do
begin
Readln(f,RMessage);
try
Client.Connect;
Client.IOHandler.Write(RMessage);
Memo1.Lines.Add(Client.IOHandler.ReadLn);
finally
Client.Disconnect;
end;
end;
closefile(f);
finally
Client.Free;
end;
end;
← →
q10nik (2007-05-30 17:07) [14]Delphi 7.0 Client.IOHandler.W и дальше нет никаких вариантов, вообще ни одного метода начинающегося на W
вариант с ClientSocket1.ClientType:=ctBlocking; вообще не приходят ответы на запросы, даже единичные, хотя с
ClientSocket1.ClientType:=ctNonBlocking ответы приходят, но как только загоняю в цикл - ничего
← →
q10nik (2007-05-30 17:09) [15]не ленивый я
не работает у меня такой вариант, я его уже пробовал =(
← →
q10nik (2007-05-30 17:17) [16]Client:=TIdTCPClient.Create;// нехватает параметра параметра, поменял на
Client:=TIdTCPClient.Create(idTCPClient1);
try
Client.Host:=IPAdress.Text;
Client.Port:=80;
assignfile(f,"base.db");
reset(f);
while not EOF(f) do
begin
Readln(f,RMessage);
try
Client.Connect;
Client.IOHandler.Write(RMessage);//Undeclared identifier
{можно заменить на Client.SendCmd(RMessage);}
Memo1.Lines.Add(Client.IOHandler.ReadLn);////Undeclared identifier
{можно заменить на Client.ReadLn(RMessage);}
finally
Client.Disconnect;
end;
end;
closefile(f);
finally
Client.Free;
end;
в таком варианте компилится, но в мемо записываются, угадайте ;) правильно все вторые строчки ответов сервера на каждый мой запрос!!!
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
Date: Wed, 30 May 2007 13:16:21 GMT
← →
q10nik (2007-05-30 17:30) [17]ура все заработало, просто мне нужно было быть внимательнее
Client.WriteLn и все никаких IOHandler
всем спасибо
← →
Сергей М. © (2007-05-31 09:02) [18]
> Client:=TIdTCPClient.Create;// нехватает параметра параметра,
> поменял на
>
> Client:=TIdTCPClient.Create(idTCPClient1);
Сам-то понял что сделал ?)
← →
G_M_S © (2007-05-31 09:51) [19]TidHTTP спасет отца русской демократии :))) Более того - он позволяет грузить только хидер, т.е. как раз то, что тебе и надо (код ответа там как раз и передается). И реализация работы по HTTP там уже готовая, причем ОЧЕНЬ грамотно написанная - он за тебя будет знать, когда чего отправлять и когда ждать ответ.
← →
имя (2007-07-25 13:22) [20]Удалено модератором
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.039 c