Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.11.2007, 14:23
phoenix_87 phoenix_87 вне форума
Прохожий
 
Регистрация: 09.11.2007
Сообщения: 1
Репутация: 10
По умолчанию 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter