Текущий архив: 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
Время: 0.044 c