Главная страница
    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.5 MB
Время: 1.644 c
2-1200304324
гость
2008-01-14 12:52
2008.02.10
получение всех точек дуги (arc)


15-1199908729
Василий2
2008-01-09 22:58
2008.02.10
Чем ограничить скорость?


15-1198113820
Anatoly Podgoretsky
2007-12-20 04:23
2008.02.10
О выборе платформы для ВЕБ и ФТП сервера


2-1200415604
Michael
2008-01-15 19:46
2008.02.10
Преобразование word a в 2 byte a


2-1200553630
NaRuTo
2008-01-17 10:07
2008.02.10
Добавление файлов в программу.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский