![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
HTTP клиент с помощью TClientSocket [WinXP]
Кефир87 © (2006-01-11 02:04:00)Мне нечего делать и я решил попробовать написать HTTP клиент. Но столкнулся с проблемой... Для тестирования использую Small HTTP Server. В обработчик ClientSocket'а пишу:
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText('GET / HTTP/1.1'#13#10);
Socket.SendText('Host: 127.0.0.1'#13#10);
Socket.SendText('User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0rc2) Gecko/20020512 Netscape/7.0b1'#13#10);
Socket.SendText('Accept: application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mn g,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1'#13#10);
Socket.SendText('Accept-Language: en-us, en;q=0.50'#13#10);
Socket.SendText('Accept-Encoding: gzip, deflate, compress;q=0.9'#13#10);
Socket.SendText('Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66'#13#10);
Socket.SendText('Keep-Alive: 300'#13#10);
Socket.SendText('Connection: keep-alive'#13#10);
Socket.SendText('Referer: http://127.0.0.1/'#13#10);
Socket.SendText('Pragma: no-cache'#13#10);
Socket.SendText('Cache-Control: no-cache'#13#10);
end;
Для надежности запрос полностью стырил у Netscape. Именно такой запрос от него приходит на сервер.
Делее в обработчике кнопки просто пишу:
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Close;
ClientSocket1.Open;
end;
Запрос приходит на сервер в том виде, какой и должен. Но ответа не приходит, ибо сразу после прихода запроса сервер сообщаетError: Connection aborted!
Что я упустил. Искал в яндексе реализацию. Не нашел.
Digitman (2006-01-11 14:19:00) [1]
> Кефир87 © (11.01.06 14:16) [7]
ну вот это другой коленкор)
Кефир87 (2006-01-11 14:16:00) [2]Я понял! Это приходил предидущий запрос! Так-как перед тем как послать новый запрос я обрываю соединение, сервер говорил что оно прервано и отображал ту часть запроса которая до неего доша до обрыва. Вот как 8)
Digitman (2006-01-11 14:08:00) [3]
> Потому что не было окончания запроса
ну и что ?
ну не было его, предположим ... сервер должен ждать это самое "окончание" в пределах тайм-аута ... а у тебя, судя по
> сразупосле прихода запроса
кто-то с какого-то перепугу рвет соединение, несмотря на то что запрос передан не целиком
Кефир87 (2006-01-11 13:41:00) [4]Потому что не было окончания запроса... Таймаут может... Главное что теперь все работает и ответ приходит 8) Буду ковыряться дальше 8)
Digitman (2006-01-11 13:32:00) [5]
> Вопрос закрыт
вряд ли закрыт ..
осталось невыясненным, почему connection aborted
Кефир87 (2006-01-11 13:26:00) [6]
>
> Сервер ждет окончания запроса. У тебя его нет.
> Вот и все.
>
> Socket.SendText('Cache-Control: no-cache'#13#10#13#10);
Спасибо! Вопрос закрыт.
Reindeer Moss Eater (2006-01-11 10:09:00) [7]Но ответа не приходит
Сервер ждет окончания запроса. У тебя его нет.
Вот и все.
Socket.SendText('Cache-Control: no-cache'#13#10 #13#10);
Digitman (2006-01-11 09:05:00) [8]Какой режим работы клиентского гнезда тобой установлен - ctNonBlocking или ctBlocking ?
Почему не анализируешь результат выполнения вызываемых тобой SendText-методов ?
Где обработка событий OnRead, OnWrite, OnError, OnDisconnect ?