What’s the simplest way to call Http POST url using Delphi?

前端 未结 3 1294
迷失自我
迷失自我 2020-12-01 01:53

Inspired by the question What’s the simplest way to call Http GET url using Delphi? I really would like to see a sample of how to use POST. Preferably to receive XML from th

相关标签:
3条回答
  • 2020-12-01 02:30

    Using Indy. Put your parameters in a StringList (name=value) and simply call Post with the URL and StringList.

    function PostExample: string;
    var
      lHTTP: TIdHTTP;
      lParamList: TStringList;
    begin
      lParamList := TStringList.Create;
      lParamList.Add('id=1');
    
      lHTTP := TIdHTTP.Create;
      try
        Result := lHTTP.Post('http://blahblahblah...', lParamList);
      finally
        lHTTP.Free;
        lParamList.Free;
      end;
    end;
    
    0 讨论(0)
  • 2020-12-01 02:31

    Here's an example of using Indy to Post a JPEG to a webserver running Gallery

    I've got more examples of this sort of stuff (I use them in a screensaver I wrote in Delphi for the Gallery project available here, or more info on the Gallery website here).

    The important bit I suppose is that the JPEG gets passed in as a stream.

    procedure AddImage(const AlbumID: Integer; const Image: TStream; const ImageFilename, Caption, Description, Summary: String);
    var
      Response: String;
      HTTPClient: TidHTTP;
      ImageStream: TIdMultipartFormDataStream;
    begin
    
      HTTPClient := TidHTTP.Create;
    
      try
        ImageStream := TIdMultiPartFormDataStream.Create;
        try
          ImageStream.AddFormField('g2_form[cmd]', 'add-item');
          ImageStream.AddFormField('g2_form[set_albumId]', Format('%d', [AlbumID]));
          ImageStream.AddFormField('g2_form[caption]', Caption);
          ImageStream.AddFormField('g2_form[force_filename]', ImageFilename);
          ImageStream.AddFormField('g2_form[extrafield.Summary]', Summary);
          ImageStream.AddFormField('g2_form[extrafield.Description]', Description);
    
          ImageStream.AddObject('g2_userfile', 'image/jpeg', Image, ImageFilename);
    
          Response := HTTPClient.Post('http://mygallery.com/main.php?g2_controller=remote:GalleryRemote', ImageStream);
        finally
          ImageStream.Free;
        end;
      finally
        HTTPClient.Free;
      end;
    end;
    
    0 讨论(0)
  • 2020-12-01 02:38

    Again, Synapse TCP/IP library to the rescue. Use the HTTPSEND routine HTTPPostURL.

    function HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean;
    

    Your URL would be the resource to post too, the URLDATA would be the form data, and your XML results would come back as a stream in DATA.

    0 讨论(0)
提交回复
热议问题