如何在Delphi中发出HTTP Patch请求

时间:2014-07-03 14:19:52

标签: delphi-xe5 http-patch

这个问题是关于在Delphi XE5中构建的应用程序。

我正在与第三方合作,提供一个应用程序,允许用户通过HTTP帖子将信息(JSON格式)更新到第三方的API。如果我将用户信息分成单个对象,我可以使用POST方法,但由于单个事件的数量过程很慢。如果我执行包含多个对象的文件的批量发布,但是api要求我在上传文件与单个对象时使用PATCH动词要快得多。我可以使用curl这样做,但我想避免必须在每个用户系统上安装curl来执行此操作。

有没有办法在Delphi中使用PATCH动词? Indy似乎没有支持PATCH。

2 个答案:

答案 0 :(得分:5)

如果您使用的是最新版本的Indy 10,则TIdHTTP有2个重载Patch()方法和Response.AcceptPatch属性,这些属性已于5个月前添加(适用于在Embarcadero的REST客户端中使用):

procedure Patch(AURL: string; ASource, AResponseContent: TStream);
function Patch(AURL: string; ASource: TStream): string;

property AcceptPatch: string;

如果您使用的是旧版本的Indy,则可以调用TIdHTTP.DoRequest()方法使用自定义谓词发送请求。它被声明为protected,因此您必须使用访问者/后代类来访问它,例如:

type
  TIdHTTPAccess = class(TIdHTTP)
  end;

TIdHTTPAccess(IdHTTP1).DoRequest('PATCH', URL, SourceData, nil, []);

答案 1 :(得分:0)

仅填写此信息,请按照示例从api返回

    AStrRequest := TStringStream.Create('your json to send');
    AStrResponse := TStringStream.Create;

    TIdHTTPAccess(http).DoRequest('PATCH', FURL, AStrRequest, AStrResponse,[]);