【问题标题】:What’s the simplest way to call Http POST url using Delphi?使用 Delphi 调用 Http POST url 的最简单方法是什么?
【发布时间】:2008-11-19 14:17:22
【问题描述】:

What’s the simplest way to call Http GET url using Delphi?这个问题的启发 我真的很想看看如何使用 POST 的示例。最好从调用中接收 XML。

补充:在帖子数据中包含图像或其他文件怎么样?

【问题讨论】:

    标签: delphi http


    【解决方案1】:

    使用印地。将您的参数放入 StringList (name=value) 并使用 URL 和 StringList 调用 Post。

    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;
    

    【讨论】:

    • TIdHTTP 也支持 https?
    • lParamList 中的参数是否与对 delphi http 服务器的请求的未解析参数相同(我正在尝试向已创建的 delphi http 服务器发送 post 请求)
    • 我想在将参数发布到网站后对网站本身执行进一步的操作,该怎么做?是否可以使用上述方法?
    • @Ninad:是的,这是可能的。只需在释放 TIdHTTP 对象之前再次调用 Post 或 Get。
    【解决方案2】:

    这是一个使用 Indy 将 JPEG 文件发布到运行 Gallery 的网络服务器的示例

    我有更多这类东西的例子(我在 Delphi 中为 Gallery 项目编写的屏幕保护程序中使用了它们,可用 here,或在 Gallery 网站 here 上获得更多信息)。

    我认为重要的一点是 JPEG 作为流传入。

    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;
    

    【讨论】:

      【解决方案3】:

      再次,Synapse TCP/IP library 进行救援。使用 HTTPSEND 例程 HTTPPostURL

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

      您的 URL 也将是要发布的资源,URLDATA 将是表单数据,您的 XML 结果将作为数据流返回。

      【讨论】:

      • Synapse 绝对是另一个可行的选择。
      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      • 2010-12-05
      • 1970-01-01
      相关资源
      最近更新 更多