这个问题是关于在Delphi XE5中构建的应用程序。
我正在与第三方合作,提供一个应用程序,允许用户通过HTTP帖子将信息(JSON格式)更新到第三方的API。如果我将用户信息分成单个对象,我可以使用POST方法,但由于单个事件的数量过程很慢。如果我执行包含多个对象的文件的批量发布,但是api要求我在上传文件与单个对象时使用PATCH动词要快得多。我可以使用curl这样做,但我想避免必须在每个用户系统上安装curl来执行此操作。
有没有办法在Delphi中使用PATCH动词? Indy似乎没有支持PATCH。
答案 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,[]);