Прочитать ответ скрипта средствами WinAPI

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by miako, 12 Jun 2010.

  1. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Есть пхп скрипт. В нем echo 'hello'; Как мне получить это хеллоу самым простым способом?

    Делаю так:
    Code:
    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 оказываются иероглифы.
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    может GET... да и в результате ты получишь еще http заголовки
    кстати если php исполняется у тебя на компе не в виде модуля апатча можно напрямую через пайпы запустить php.exe и выполнить указанный скрипт...
     
    _________________________
    #2 Gar|k, 12 Jun 2010
    Last edited: 12 Jun 2010
  3. akimov_aleks

    akimov_aleks New Member

    Joined:
    3 May 2009
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    кроме get другова не чего невижу простого
     
  4. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Гетом сразу пробовал, тоже самое. в метатегах стоит utf-8, API тоже юникод. Сам хз что тут не так...
     
  5. Overdrive

    Overdrive New Member

    Joined:
    5 Jun 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Возможно ты не правильно указал параметры функциям. Посмотри информацию о функциях в справочнике по WinAPI, а еще лучше в MSDN.
     
  6. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    А я по твойму откуда их брал?
     
  7. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    Code:
    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.
     
    #7 Faost, 13 Jun 2010
    Last edited: 13 Jun 2010
  8. Pyhin

    Pyhin Member

    Joined:
    25 Oct 2008
    Messages:
    1
    Likes Received:
    32
    Reputations:
    0
    Попробуй сохранять код страницы в переменную таким способом:
    Code:
      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;