Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
[Delphi] Winsock 1.1 - В чем проблема? |

04.05.2010, 22:16
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
[Delphi] Winsock 1.1 - В чем проблема?
реализовал методы GET & POST. Метод POST работает нормально.. Метод GETзависает и не может получить ответ от сервера. Сниффер показал, что get отправлен, а однако тело ответа пустое, заголовки пустые (ответные). В чем же проблема? привожу код.
Код:
// ---- Выдергиваем хост ----
function GetHost(const AURL: string): string;
var
sResult : string;
begin
sResult := AURL;
If Pos('www', sResult) <> 0 Then Delete(sResult, Pos('w', sResult), 4);
sResult := Copy(sResult, Pos('://', sResult) +3, Length(sResult));
Delete(sResult, Pos('/', sResult), Length(sResult));
Result := sResult;
end;
{ ***************************************************************************** }
// ---- Отправка запроса ----
function SendRequest(URL,PACKET:string):string;
var
req{,data} : string;
buf : array[0..1500] of char;
wData : WSADATA;
addr : sockaddr_in;
sock : integer;
error : integer;
phe : PHostEnt;
begin
Result := '';
WSAStartup($0101, wData);
phe := gethostbyname(PChar(string(GetHost(url))));
if phe = nil then begin
WSACleanup;
exit;
end;
sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if sock = INVALID_SOCKET then begin
WSACleanup;
exit;
end;
addr.sin_family := AF_INET;
addr.sin_port := htons(80);
addr.sin_addr := PInAddr(phe.h_addr_list^)^;
error := connect(sock, addr, sizeof(addr));
if error = SOCKET_ERROR then begin
closesocket(sock);
WSACleanup;
exit;
end;
req := PACKET;
if Send(Sock,pointer(req)^,length(req),0)=SOCKET_ERROR then exit;
fillchar(buf,sizeof(buf),0);
recv(Sock,buf,SizeOf(buf),0);//sizeof(buf
closesocket(Sock);
result:=buf;
end;
{ ***************************************************************************** }
// ---- Отправка POST-запроса ----
function Post(const AURL: string; const ASource: TStringList): string;
var
req : string;
_Post : string;
tmp : string;
begin
_post := ASource.Text;
_post := StringReplace(_post, #13#10, '&', [rfReplaceAll]);
tmp := AURL;
tmp := Copy(tmp, Length('http://' + GetHost(tmp)) +1, Length(tmp));
req:='POST ' + tmp + ' HTTP/1.1' + #13#10 +
'Host: '+ GetHost(AURL) + #13#10+
'User-Agent: Opera/9.24 (Windows NT 5.1; U; en)' + #13#10 +
'Accept: */*;q=0.1' + #13#10 +
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8' + #13#10 +
'Connection: Keep-Alive' + #13#10 +
'Referer: http://vkontakte.ru/index.php' + #13#10 +
'Content-Length: '+ IntToStr(Length(_POST)) + #13#10 +
'Content-Type: application/x-www-form-urlencoded'#13#10#13#10 + _POST;
result := SendRequest(aurl, req);
end;
// ---- Отправка GET-запроса ----
function Get(const AURL: string): string;
var
req : string;
tmp : string;
begin
tmp := AURL;
tmp := Copy(tmp, Length('http://' + GetHost(tmp)) +1, Length(tmp));
req:='GET ' + tmp + ' HTTP/1.1' + #13#10 +
'Host: '+ GetHost(AURL) + #13#10+
'User-Agent: Opera/9.24 (Windows NT 5.1; U; en)' + #13#10 +
'Accept: */*;q=0.1' + #13#10 +
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8' + #13#10 +
'Connection: Keep-Alive' + #13#10 +
//'Referer: http://vkontakte.ru/index.php' + #13#10 +
'Content-Type: application/x-www-form-urlencoded'#13#10;
result := SendRequest(aurl, req);
end;
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|