3

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

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

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

4

2 回答 2

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, []);
于 2014-07-03T15:25:34.917 回答
0

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

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

    TIdHTTPAccess(http).DoRequest('PATCH', FURL, AStrRequest, AStrResponse,[]);
于 2018-03-22T14:19:44.610 回答