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

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

HTTP запрос средствами WinSock [D7, Win2k, WinXP]


Страницы:   1 2

-=Germe$=- ©   (2007-05-16 07:47:00) 

Как сделать HTTP запрос(GET) средствами WinSock


-=Germe$=-   (2007-05-24 09:56:00) [1]

Ошибка вот в этой строчке GET:=Format('GET %s HTTP/1.0'#13#10+'User-Agent: %s'#13#10#13#10,     [' http://localhost/test.php?variable='+str,'incompatible']);


-=Germe$=-   (2007-05-24 09:34:00) [2]

Спасибо большое.. Оно работает.


Сергей М.   (2007-05-24 09:29:00) [3]


> проверил - не работат


А у меня работает.

procedure TForm1.Button1Click(Sender: TObject);
var
 Sock: TSocket;
 Data: TWSAData;
 Adr: sockaddr_in;
 Get, Response: String;
 BytesRead: Integer;
begin
 WSAStartup($101,Data);
 Adr.sin_family:=AF_INET;
 Adr.sin_addr.S_addr:=inet_addr('213.234.193.253'); //www.delphimaster.ru
 Adr.sin_port:=htons(80);
 Sock:=Socket(AF_INET, SOCK_STREAM, 0);
 if Sock=INVALID_SOCKET then Exit;
 if connect(Sock,Adr,sizeof(Adr))=0 then begin
   GET:=Format('GET %s HTTP/1.0'#13#10+'User-Agent: %s'#13#10#13#10, ['/cgi-bin/forum.pl?id=1179287240&n=4', 'compatible']);
   if Send(Sock, PChar(Get)^, Length(Get), 0) = SOCKET_ERROR then
     ShowMessage('Send error: ' + IntToStr(WSAGetLastError))
   else begin
     SetLength(Response, 65536);
     BytesRead := Recv(Sock, PChar(Response)^, 65536, 0);
     case BytesRead of
       -1: ShowMessage('Recv error: ' + IntToStr(WSAGetLastError));
       0:  ShowMessage('Connection closed by peer');
     else
       Response[BytesRead] := #0;
       ShowMessage(Response);
     end;
   end;
 end;
 CloseSocket(Sock);
 WSACleanup;
end;


Что я неправильно делаю ?


-=Germe$=-   (2007-05-24 05:36:00) [4]

Сейчас проверил - не работат....


-=Germe$=-   (2007-05-23 12:33:00) [5]

Спасибо большое


Сергей М.   (2007-05-23 12:30:00) [6]

если str - это String, то хотя бы так:

Send(Sock, PChar(Get)^, Length(Get), 0);

p.s.
Паскаль нужно знать как "отче наш".


-=Germe$=-   (2007-05-23 12:26:00) [7]

А можно узнать как тогда отправлять?


Сергей М.   (2007-05-23 11:42:00) [8]

Ты отправил на сервер галиматью, а не текст http-запросаЮ, вот скрипт и не выполняется.

см. формальный и фактический тип 2-го параметра вызова ф-ции send()


-=Germe$=-   (2007-05-23 11:36:00) [9]

send() возвращает больше 0... Но пхп скрипт не выполняется.


Сергей М.   (2007-05-23 11:33:00) [10]


> Отладчик ничего не говорит


Ты у него не спрашивал, вот он ничего и не говорит.

Где анализ результата вызова ф-ции send() ? Нет у тебя его. А раз нет, то и рассуждать о факте доставки данных запроса до сервера попросту бессмысленно.


-=Germe$=-   (2007-05-23 11:20:00) [11]

Отладчик ничего не говорит. Данные до скрипта не доходят. Вполне возможно, что и до сервера.


Сергей М.   (2007-05-23 11:13:00) [12]

Что значит "не работает" ?
Что говорит отладчик ?


-=Germe$=-   (2007-05-23 10:56:00) [13]

Даже так: Adr.sin_addr.S_addr:=inet_addr(pchar('127.0.0.1')); не работает... У меня такое чувство, что сам запрос имеет ошибку...


Сергей М.   (2007-05-23 10:45:00) [14]


> Нет.


Печально это, печально.


> в чем проблема?


В том что параметром этой ф-ции должно быть строковое представление IP-адреса, а не имя хоста и уж тем более не URL.


-=Germe$=-   (2007-05-23 10:37:00) [15]

Нет. А в чем проблема?


Сергей М.   (2007-05-23 10:18:00) [16]

Здесь

> Sock:=Socket(AF_INET, SOCK_STREAM, 0);


ошибка тобой исправлена.

А здесь


> Adr.sin_addr.S_addr:=inet_addr(pchar(' http://localhost'));


как была, так и осталась.

В справку к ф-ции inet_addr() вникал ?


-=Germe$=-   (2007-05-23 10:06:00) [17]

Adr.sin_addr.S_addr:=inet_addr(pchar(' http://localhost'));
Sock:=Socket(AF_INET, SOCK_STREAM, 0);


Сергей М.   (2007-05-23 10:05:00) [18]

приводи исправленный код


-=Germe$=-   (2007-05-23 09:59:00) [19]

Это уже исправлено, но все равно не работает


Сергей М.   (2007-05-23 09:36:00) [20]


> Что не верно?


Как минимум вот это:


>  Sock:=Socket(AF_INET, SOCK_DGRAM, 0);
>  Adr.sin_addr.S_addr:=inet_addr(pchar(' http://localhost'));


Страницы:   1 2

Наверх

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