|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
TClientSocket и HTTP запрос. В чем ошибка?!
Здравствуйте. Вопрос касается TClientSocket и HTTP - искал где можно, смотрел примеры, перечитывал синтаксис HTTP/1.1 (1.0) - сил больше нет, не пойму в чем ошибка?! Вот код:
Код:
var Domain, Scenery, aHost: ShortString; .... procedure TForm1.Button1Click(Sender: TObject); begin //соединяемся с удаленным сервером. Domain := 'delphikingdom.com'; aHost := 'delphikingdom.com'; Scenery := '/'; ClientSocket1.Host := Domain; ClientSocket1.Port := 80; ClientSocket1.Open; end; procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); var st1, st2, st3: string; stOut: string; ddBuffer : array[0 .. 19] of Char; MySocket: TWinSocketStream; CountReadBytes, i: Integer; begin MySocket := TWinSocketStream.Create(Socket, 60000); st1 := 'GET ' + Scenery + ' HTTP/1.1' + #10; st2 := 'Host: ' + aHost + #10; st3 := '#10#10'; //посылаем заголовки запроса if MySocket.Write(st1, Length(st1)) > 0 then if MySocket.Write(st2, Length(st2)) > 0 then if MySocket.Write(st3, Length(st3)) > 0 then Beep; //для проверки передаются ли данные - передаются всегда //ждем данные while not MySocket.WaitForData(100) do Application.ProcessMessages; stOut := ''; //считываем не более ~17 Кб. repeat ddBuffer := ''; CountReadBytes := MySocket.Read(ddBuffer, 20); if CountReadBytes > 0 then for i := 0 to CountReadbytes - 1 do StOut := StOut + ddBuffer[i] else begin ClientSocket1.Close; Break; end; until Length(stOut) >= 17000; MySocket.Free; ShowMessage(StOut); //выводим то что нам отдал сервер ClientSocket1.Close; end; Проблема в том, что ответ сервера всегда ЛИБО "HTTP....400 Bad Request...", либо ответа вообще нет! (т.е. далее WaitForData вообще не доходит) - смотря какие адреса вводим в Domain, Scenery. Пробовал разные URLы- закономерности не уловил... Положительного результата еще не было, запрос вроде бы сформирован правильно. Помогите разобраться, пожалуйста! PS. На форме TClientSocket и TButton. Режим ClientSocket - ctBlocking. Среда Delphi7. |