Конференция "WinAPI" » получение html-страницы post-запросом
 
  • Dy1 (07.01.10 10:55) [0]
    Что я делаю не так? Данные не возвращаются

    function TForm1.PostData(Data: ansiString; const URL: String): String;
    var
     Server, Path, Extra: String;
     Scheme, Port, Flags, Ctx: Integer;
     Status, Index, Size, Downloaded: DWord;
     FInetRoot, FInetConnect, FInetRequest: HInternet;
     Buffer: String;
    const
     AcceptTypes: array [0..1] of PChar = ('text/xml', nil);
    begin
     FInetRequest := nil;
     FInetConnect := nil;
    //  SplitURL(URL, Server, Path, Extra, Scheme, Port);
    // на время отладки!
    server := 'dy.cdrrhq.ru';
    path   := '/';
    extra  := 's';
    scheme := INTERNET_SCHEME_HTTP;
    port   := INTERNET_DEFAULT_HTTP_PORT;

     Ctx := Random(MaxInt);
     { Try to connect into the internet }
     FInetRoot := InternetOpen( 'h', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
     try
       // Try to connect to internet service
       FInetConnect := InternetConnect(FInetRoot, PChar(Server), Port, nil, nil, INTERNET_SERVICE_HTTP, 0, Ctx);
       // Send request
       Flags := INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_NO_CACHE_WRITE;
       if Scheme = INTERNET_SCHEME_HTTPS then
         Flags := Flags or INTERNET_FLAG_SECURE;
       FInetRequest := HttpOpenRequest( FInetConnect, 'POST', PChar(Path + Extra), nil, nil, @AcceptTypes, Flags, Ctx);
     HttpSendRequest(FInetRequest, nil{заголовки}, 0{их длина}, PChar(Data){принятая строка}, Length(Data));

       // Check for error reply
       Size := SizeOf(Status);
       index := 0;
       if HttpQueryInfo(FInetRequest, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, @Status, Size, index)
         and (Status >= 300) then
       begin
         // If Web server returns reply code as 300 or more, retrieve error description
         Size := 1024;
         SetLength(Buffer, Size);
         if HttpQueryInfo( FInetRequest, HTTP_QUERY_STATUS_TEXT, @Buffer[1], Size, Index) then
         begin
         // signal web server error
           SetLength(Buffer, Size);
           msgok(Buffer);
           Exit;//ХЗ как отработает
         end;
       end;
       // If reply is positive, read Buffers
       Result := '';
       repeat
         InternetQueryDataAvailable( FInetRequest, Size, 0, Ctx);
         if Size > 0 then
         begin
           SetLength(Buffer, Size);
           InternetReadFile( FInetRequest, @Buffer[1], Size, Downloaded);
           SetLength(Buffer, Downloaded);
           Result := Result + Buffer;
         end;
       until Size = 0;
     finally
       InternetCloseHandle(FInetRequest);
       InternetCloseHandle(FInetConnect);
       InternetCloseHandle(FInetRoot);
     end;
    end;

    procedure TForm1.Button1Click(Sender: PObj);
    begin
     memo1.Text := PostData('n1=1&n2=b&n3=5', '');

  • Dy1 (07.01.10 10:57) [1]
    поправка - чистый html (начало) идёт, не возвращаются значения переменных
  • Dy1 (07.01.10 11:04) [2]
    исправил на
    HttpSendRequest( FInetRequest, 'Content-type: application/x-www-form-urlencoded'#10#13


    и заработало.
  • Дмитрий С © (07.01.10 21:48) [3]
    Спасибо за пример:)
 
Конференция "WinAPI" » получение html-страницы post-запросом
Есть новые Нет новых   [134431   +15][b:0][p:0.002]