Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TClientSocket+HTTP запросы=Вопросы и проблемы [D5, Win2k]


hacker ©   (2002-01-01 19:16:00) 

Мастера, доброго времени суток...
Ситуация такая: Я прочитал весь форум, IEFC-Documents: 2068, 1945(HTTP 1.1, 1.0). Нужно послать запрос напрямую в сокет (для скорости - будет часть прокси), поэтому не предлогайте компоненты, и копание в их исходниках(это не совсем понятно).
Я реализовал это на TClientSocket.
//иницилизация не приводится
ClientSocket1.Host:="www.yandex.ru";
ClientSocket1.Service:="http";
// ClientSocket1.Port:=80;
Buf:="GET "+Edit1.Text// там - "/index.html"\\+" HTTP/1.1";
Buf:=TStringList.Create;
ClientSocket1.Open;
Buf.Add("HOST: "+ClientSocket1.Host);
Buf.Add("ACCEPT: */*");
Buf.Add("Pragma: no-cache");
Buf.Add(Cache-Control: no-cache");
ClientSocket1.Socket.SendText(Buf.Text);

Только после того, как я выполню это 2(3) раза, возникает событие OnRead, причем connect=Active , и только после 2(3)раза сервер его разрывает и возвращает, что missing separator colons.
Причем данные отсылаются при каждом клике.

Что за прикол, и как он решается, а лучше приведите реальный и оттестированный код как послать HTTP-запрос.
Вот типа такие проблемы...


Ghost.   (2002-01-01 21:31:00) [1]

Всегда пожалуйста :0)


hacker   (2002-01-01 21:27:00) [2]

GHOST, твой вариант работает. У себя я нашел 2 ошибки:
1) надо лучше читать IEFC - в конце запроса #13#10
2) видно, когда ClientSocket.open и SendText стоят вместе, получается что запрос улетает в еще не открытый сокет (по крайней мере я так думаю).
бОльшое спасибо...


Ghost.   (2002-01-01 20:50:00) [3]

Я не ртаботал с ClientSocketя использую дртугие сокетные компоненты но тут видимо тоже джолжно работать. Я только сделал прогу отрправки СМС тоже запртос делал сам
На какоенибудь событие (какое тебе надо)
CliSocket.Proto := "tcp";
CliSocket.Port :="80";
CliSocket.Addr :="www.mts.ru";
CliSocket.Connect;
а потом на событие
OnConnect уже CliSocket.SendStr(memo1.Text + #13 + #10);
пертд этим фортмирую сам запрос
memo1.Lines.Add("GET /тут че тебе надо+" HTTP/1.0");
memo1.Lines.Add("Accept: */*");
memo1.Lines.Add("Referer: http://www.mts.ru/");
memo1.Lines.Add("Accept-Language: ru");
memo1.Lines.Add("Accept-Encoding: gzip, deflate");
memo1.Lines.Add("User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
memo1.Lines.Add("Host: www.mts.ru");
memo1.Lines.Add("Proxy-Connection: Keep-Alive");
и все четко ртаботает....


Наверх

Титульная страница Поиск, карта сайта Написать письмо