Post запрос в delphi через winsock

Fantomsky Fantomsky

Всё работает если запускать прямо в Delphi. А если в проводнике скомпилированный экзешник  запустить не работает! Что это значит?
Дополнено (1). unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, winsock, StdCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Panel1: TPanel;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function POST(host, 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(host. ;
if phe = nil then begin
WSACleanup;
result:='Error';
exit;
end;
sock:= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if sock = INVALID_SOCKET then begin
WSACleanup;
result:='Error';
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;
result:='Error';
exit;
end;
req:= PACKET;
if Send(Sock, pointer(req)^, length(req), 0)=SOCKET_ERROR then begin
result:='Error';
exit;
end;
fillchar(buf, sizeof(buf), 0);
recv(Sock, buf, 10000, 0);//sizeof(buf
closesocket(Sock);
result:=buf;
end;

function ePOST(host, URL,_POST:string):string;
var req: string;
begin
req:='POST '+URL+' HTTP/1.1'#13#10+
     'Host: '+host+#13#10+
     'User-Agent: Opera/9.24 (Windows NT 5.1; U; en)'#13#10+
     'Accept: */*;q=0.1'#13#10+
     'Accept-Encoding: gzip, deflate'#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:=POST(host, URL, req);
end;

procedure TForm1. Button1Click(Sender: TObject);
var
str:string;
begin
str:=ePOST('localhost','http://localhost/echo.php','a=b&c=d&f=g&');
Memo1.Text:=str;
end;

end.
Дополнено (2). Оказалось, ответ сервера в мемо не отображается, но непонятно почему…
Дополнено (3). Ура! Разобрался! Ошибка в recv(Sock, buf, 10000, 0); исправил на recv(Sock, buf, sizeof(buf), 0);

Киньте полезную ссылку по теме, поставлю "лучший ответ".

Гость Гость

лучший ответ
Глюк

Добавить комментарий | Похожие обсуждения

Вопросы и ответы по Вконтакте
Вопросы и ответы

Популярные вопросы и ответы о социальной сети www.vkontakte.ru (vk.com)