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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Прочитать ответ скрипта средствами WinAPI (https://forum.antichat.xyz/showthread.php?t=211096)

miako 12.06.2010 19:42

Прочитать ответ скрипта средствами WinAPI
 
Есть пхп скрипт. В нем echo 'hello'; Как мне получить это хеллоу самым простым способом?

Делаю так:
Код:

hInet := InternetOpen('Delphi',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
      hFile := InternetConnect(
                hInet,
                'localhost',
                INTERNET_DEFAULT_HTTP_PORT,
                nil,nil,
                INTERNET_SERVICE_HTTP,
                0,
                1);
      hRequest := HttpOpenRequest(
                    hFile,
                    'POST',
                    'test.php',
                    nil,
                    nil,
                    nil,
                    INTERNET_FLAG_NO_CACHE_WRITE,
                    1);
      bSend := HttpSendRequest(hRequest, nil,0, nil,0);
      InternetReadFile(hRequest, @Buffer, 4, BufferLen);

В результате в buffer оказываются иероглифы.

Gar|k 12.06.2010 20:54

может GET... да и в результате ты получишь еще http заголовки
кстати если php исполняется у тебя на компе не в виде модуля апатча можно напрямую через пайпы запустить php.exe и выполнить указанный скрипт...

akimov_aleks 12.06.2010 21:03

кроме get другова не чего невижу простого

miako 12.06.2010 22:06

Гетом сразу пробовал, тоже самое. в метатегах стоит utf-8, API тоже юникод. Сам хз что тут не так...

Overdrive 13.06.2010 19:34

Возможно ты не правильно указал параметры функциям. Посмотри информацию о функциях в справочнике по WinAPI, а еще лучше в MSDN.

miako 13.06.2010 19:53

А я по твойму откуда их брал?

Faost 13.06.2010 21:33

Код:

uses
  Windows,
  WinSock;



 var Sock: TSocket;
    addr: sockaddr_in;
    wsa: wsadata;
    host: PHostEnt;
    Get: string;
    avail_bytes: integer;
    buf: pointer;
    fset: TFDset;
    label 2, 3;
begin
 if WSAStartup(MAKEWORD(1, 1), wsa) <> 0 then ExitProcess(0);

 Sock := socket(AF_INET, SOCK_STREAM, 0);
 if Sock = INVALID_SOCKET then goto 3;

 addr.sin_family := PF_INET;
 addr.sin_port := htons(80);
 host:= GetHostByName('antichat.net'); //заменишь на свой
 PInteger(@addr.sin_addr.S_addr)^:= PInteger(host.h_addr^)^;

  if connect(Sock, addr, sizeof(addr)) <> 0 then goto 2;

  Get:= 'GET http://antichat.net HTTP/1.0' + #13#10 + #13#10; //заменишь на свой

  send(Sock, PChar(Get)^, Length(Get), 0);
  avail_bytes:= 0;

  FD_ZERO(fset);
  FD_SET(Sock, fset);

  if select(0, @fset, nil, nil, nil) <= 0 then goto 2;
  ioctlsocket(Sock, FIONREAD, avail_bytes);
  buf:= VirtualAlloc(nil, avail_bytes, MEM_COMMIT, PAGE_READWRITE);
  recv(Sock, buf^, avail_bytes, 0);

  MessageBox(0, buf, nil, 0); //buf - наши данные
  VirtualFree(buf, 0, MEM_RELEASE);

  2: CloseSocket(Sock);

  3: WSACleanUp();
end.


Pyhin 13.06.2010 21:44

Попробуй сохранять код страницы в переменную таким способом:
Код:

  String;
  hRequest : pointer;
  dwBytesRead, I, L : Cardinal;
  sss: String;
  dwLength: DWORD;
  dwcode: array[1..20] of char;
  res: String;
-------------------------------------

I:=1;
 if HttpSendRequest(hRequest,PChar(sss), Length(sss), nil, 0) then
                begin
                    repeat
                    dataAvaible(hRequest, L);
                    if L = 0 then break;
                    SetLength(result, L+I);
                    if InternetReadFile(hRequest, @result[I], sizeof(L), dwBytesRead) then
                    else break;
                    inc(I, dwBytesRead);
                    until dwBytesRead = 0;

                    result[I] := #0;
                    res := PChar(@dwcode);
                end;



Время: 13:03