Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.18;
Скачать: CL | DM;

Вниз

TClientSocket+HTTP запросы=Вопросы и проблемы   Найти похожие ветки 

 
hacker   (2002-01-01 19:16) [0]

Мастера, доброго времени суток...
Ситуация такая: Я прочитал весь форум, 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 20:50) [1]

Я не ртаботал с 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");
и все четко ртаботает....


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

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


 
Ghost. ©   (2002-01-01 21:31) [3]

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



Страницы: 1 вся ветка

Текущий архив: 2002.03.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
1-57465
Evgenyk
2002-03-02 17:50
2002.03.18
А как убрать свое приложение после запуска в system tray ?


3-57309
PaulLL
2002-02-19 14:06
2002.03.18
Как вставить изображение в поле таблицы MSSQL Server а???


4-57559
Maxman
2002-01-04 07:16
2002.03.18
Запуск приложений


1-57412
Konvoy
2002-03-02 10:33
2002.03.18
BDE и Терминил-клиент


14-57505
Жаждущий!
2002-01-31 04:36
2002.03.18
КАК ПРОГАММУ НЕ ИМЕЮЩУУ ФОРМЫ, ОСТАВИТЬ РЕЗИДЕТНОЙ????