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

Вниз

HTTP запрос средствами WinSock   Найти похожие ветки 

 
-=Germe$=- ©   (2007-05-16 07:47) [0]

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


 
SpellCaster   (2007-05-16 11:27) [1]

s:=Format("GET /%s HTTP/1.0"#13#10+"User-Agent: %s"#13#10#13#10,     [URL,UserAgent]);
if Send(socket,s[1],Length(s))=SOCKET_ERROR then ...


 
SpellCaster   (2007-05-16 11:30) [2]

пардон, "GET %s", без слэша


 
апвып   (2007-05-16 13:27) [3]

у меня ситуация следующая в заголовке ответа есть следующий параметр "charset=utf-8"

и основное тело я незнаю как переконвертировать


 
clickmaker ©   (2007-05-16 13:32) [4]


> как переконвертировать

Utf8ToAnsi()


 
апвып   (2007-05-16 17:22) [5]

да я это пробовал но чегото не помогает ((

может я неправильно считываю ее?
там как идут буквы по два байта? или?


 
DVM ©   (2007-05-16 17:28) [6]


> может я неправильно считываю ее?

может и не правильно, как ты же не написал.


 
SpellCaster   (2007-05-17 14:48) [7]

> [5] апвып   (16.05.07 17:22)

Попробуй сохранить в файл и открыть в браузере либо в тексовом редакторе, поддерживающем эту кодировку


 
-=Germe$=- ©   (2007-05-23 09:19) [8]

Что не верно?

 WSAStartup($101,Data);
 Adr.sin_family:=AF_INET;
 Sock:=Socket(AF_INET, SOCK_DGRAM, 0);
 Adr.sin_addr.S_addr:=inet_addr(pchar("http://localhost"));
 If Sock=INVALID_SOCKET then
   Halt;
 Adr.sin_port:=htons(80);
 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,     ["http://localhost/test.php?variable="+str,"incompatible"]);
    Send(Sock, Get, Length(Get), 0);
 end;



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


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


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


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


 
-=Germe$=- ©   (2007-05-23 09:59) [10]

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


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

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


 
-=Germe$=- ©   (2007-05-23 10:06) [12]

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


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

Здесь

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


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

А здесь


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


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

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


 
-=Germe$=- ©   (2007-05-23 10:37) [14]

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


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


> Нет.


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


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


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


 
-=Germe$=- ©   (2007-05-23 10:56) [16]

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


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

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


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

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


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


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


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

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


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

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


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

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

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


 
-=Germe$=- ©   (2007-05-23 12:26) [22]

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


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

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

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

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


 
-=Germe$=- ©   (2007-05-23 12:33) [24]

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


 
-=Germe$=- ©   (2007-05-24 05:36) [25]

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


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


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


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

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 09:34) [27]

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


 
-=Germe$=- ©   (2007-05-24 09:56) [28]

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



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

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

Наверх




Память: 0.53 MB
Время: 0.025 c
15-1199546183
Сканер
2008-01-05 18:16
2008.02.10
Вас не раздражает когда "считывают" ?


15-1199341579
lovemaker
2008-01-03 09:26
2008.02.10
Совместимость двух людей


15-1200079941
necromancer
2008-01-11 22:32
2008.02.10
Создать аякс-лоадер


15-1200211384
No_Dead
2008-01-13 11:03
2008.02.10
Это ж что вводить надо&#133


15-1199406821
Lip
2008-01-04 03:33
2008.02.10
Оцените код, пожалуйста! (читабельность, наглядность и т.д.)