Форум: "Сети";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизHTTP клиент с помощью TClientSocket Найти похожие ветки
← →
Кефир87 © (2006-01-11 02:04) [0]Мне нечего делать и я решил попробовать написать 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 09:05) [1]Какой режим работы клиентского гнезда тобой установлен - ctNonBlocking или ctBlocking ?
Почему не анализируешь результат выполнения вызываемых тобой SendText-методов ?
Где обработка событий OnRead, OnWrite, OnError, OnDisconnect ?
← →
Reindeer Moss Eater © (2006-01-11 10:09) [2]Но ответа не приходит
Сервер ждет окончания запроса. У тебя его нет.
Вот и все.
Socket.SendText("Cache-Control: no-cache"#13#10#13#10);
← →
Кефир87 © (2006-01-11 13:26) [3]
>
> Сервер ждет окончания запроса. У тебя его нет.
> Вот и все.
>
> Socket.SendText("Cache-Control: no-cache"#13#10#13#10);
Спасибо! Вопрос закрыт.
← →
Digitman © (2006-01-11 13:32) [4]
> Вопрос закрыт
вряд ли закрыт ..
осталось невыясненным, почему connection aborted
← →
Кефир87 © (2006-01-11 13:41) [5]Потому что не было окончания запроса... Таймаут может... Главное что теперь все работает и ответ приходит 8) Буду ковыряться дальше 8)
← →
Digitman © (2006-01-11 14:08) [6]
> Потому что не было окончания запроса
ну и что ?
ну не было его, предположим ... сервер должен ждать это самое "окончание" в пределах тайм-аута ... а у тебя, судя по
> сразу после прихода запроса
кто-то с какого-то перепугу рвет соединение, несмотря на то что запрос передан не целиком
← →
Кефир87 © (2006-01-11 14:16) [7]Я понял! Это приходил предидущий запрос! Так-как перед тем как послать новый запрос я обрываю соединение, сервер говорил что оно прервано и отображал ту часть запроса которая до неего доша до обрыва. Вот как 8)
← →
Digitman © (2006-01-11 14:19) [8]
> Кефир87 © (11.01.06 14:16) [7]
ну вот это другой коленкор)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c