使用Delphi如何最简单地调用Http POST url?

37
3个回答

51

使用Indy。将您的参数放入StringList中(名称=值),然后只需使用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吗? - Gabriel
1
lParamList 参数是否与未解析的请求参数相同,用于发送 POST 请求到已创建的 Delphi HTTP 服务器? - bob_saginowski
1
我想在将参数发布到网站后,在网站本身上执行进一步的操作,如何实现?使用上述方法是否可行? - Ninad Avasare
@Ninad:是的,这是可行的。只需在释放TIdHTTP对象之前再次调用Post或Get即可。 - Bruce McGee

17

以下是使用Indy将JPEG发送到运行Gallery的网络服务器的示例。

我还有更多类似的例子(我在为Gallery项目编写的Delphi屏幕保护程序中使用它们,可以在这里找到),或者在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;

8

再次,Synapse TCP/IP库来拯救您。使用HTTPSEND例程HTTPPostURL

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

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


1
Synapse 绝对是另一个可行的选择。 - Bruce McGee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接