Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Delphi POST Запрос (https://forum.antichat.xyz/showthread.php?t=129613)

Sin3v 13.07.2009 16:30

Delphi POST Запрос
 
Как отправить post запрос с Delphi?
пример на PHP:
PHP код:

<form action="login.php" method="post">
<
input name="email" type="text" value="" />
<
input name="pass" type="password" value="" />
<
input name="submit" type="button" value="Войти" />
</
form


diznt 13.07.2009 16:40

Код:

procedure TForm1.Button1Click(Sender: TObject);
var
 PostData:TStringList;
begin
    PostData.Add('email=ololo@mail.ru');
    PostData.Add('pass=mypass');
    IdHTTP1.Post('http://sait.ru/login.php',PostData);
end;

Находу сбацал... Должно работать...
Ах да на форму компонент idHTTP1 (вкладка indy clients)

Sin3v 13.07.2009 22:34

Спс пашет, вот так)
Код:

procedure TForm1.Button1Click(Sender: TObject);
var
 PostData:TStringList;
begin
    PostData:= TStringList.Create;
    PostData.Add('email=ololo@mail.ru');
    PostData.Add('pass=mypass');
    IdHTTP1.Post('http://sait.ru/login.php',PostData);
end;


eLWAux 14.07.2009 00:04

и на сокетах )
Код:

uses winsock

const hos = 'google.com';

function POST(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;
    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,10000,0);//sizeof(buf
 closesocket(Sock);
 result:=buf;
end;

function ePOST(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(URL,req);
end;

ePOST('http://google.com','a=b&c=d&f=g&');


Hellsp@wn 14.07.2009 00:07

лучше уж на компонентах, а то этот код на сокетах ещё причёсывать и причёсывать.

Chrome~ 15.07.2009 10:57

Нет, на сокетах лучше.

Gar|k 16.07.2009 22:17

надо блин создать отдельную тему сетевое программирование.... задолбали однотипные вопросы по реализации HTTP запросов и работы с сокетами на различных языках....

Neo][acK 29.07.2009 14:44

На Wininet
Код:

var
hOpenHandle, hConnectHandle, hResourceHandle: Pointer;
begin
szHost:='www.sait.ru';
szData:=pansichar('email=ololo@mail.ru&pass=mypass&submit=''');
hOpenHandle:=InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

hConnectHandle:=InternetConnect(hOpenHandle, szHost, 80, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
hResourceHandle:=HttpOpenRequest(hConnectHandle, 'POST', '/login.php', nil, nil, nil,  INTERNET_FLAG_KEEP_CONNECTION, 0);
HttpSendRequest(hResourceHandle,  'Content-Type: application/x-www-form-urlencoded', 47, szData, lstrlen(szData));

InternetCloseHandle(hResourceHandle);
InternetCloseHandle(hConnectHandle);
InternetCloseHandle(hOpenHandle);
end;


[n]-c0der 29.07.2009 15:27

Цитата:

Сообщение от eLWAux
и на сокетах )
Код:

uses winsock

const hos = 'google.com';

function POST(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;
    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,10000,0);//sizeof(buf
 closesocket(Sock);
 result:=buf;
end;

function ePOST(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(URL,req);
end;

ePOST('http://google.com','a=b&c=d&f=g&');


И нахер?
Придерживаясь твоего поста задам вопрос, зачем ты в браузере вводишь antichat.ru а не IP адрес античата)

Сокеты нужны там где они нужы.

[n]-c0der 29.07.2009 15:29

Цитата:

Сообщение от Neo][acK
На Wininet
Код:

var
hOpenHandle, hConnectHandle, hResourceHandle: Pointer;
begin
szHost:='www.sait.ru';
szData:=pansichar('email=ololo@mail.ru&pass=mypass&submit=''');
hOpenHandle:=InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

hConnectHandle:=InternetConnect(hOpenHandle, szHost, 80, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
hResourceHandle:=HttpOpenRequest(hConnectHandle, 'POST', '/login.php', nil, nil, nil,  INTERNET_FLAG_KEEP_CONNECTION, 0);
HttpSendRequest(hResourceHandle,  'Content-Type: application/x-www-form-urlencoded', 47, szData, lstrlen(szData));

InternetCloseHandle(hResourceHandle);
InternetCloseHandle(hConnectHandle);
InternetCloseHandle(hOpenHandle);
end;



Ужасный код(

Научись красиво оформлять...


Время: 17:26