如何解决如何在 TIdHTTP 中指定自定义 HTTP 方法?
我需要通过指定自定义 HTTP 方法来调用 TIDHTTP。
在邮递员中,我通过在下拉列表中输入方法名称来实现此目的,我可以在其中选择 GET/POST/PUT/...:
如何在 TIdHttp 中实现这一点?在这个例子中,HTTP 方法不是 GET 而是 GO(当然 GO 是自定义的而不是标准的)。
谢谢。
解决方法
TIdHTTP
有一个公共的 Request.Method
属性,您可能会想使用它,但它不起作用,因为 TIdCustomHTTP.DoRequest()
方法(它完成所有实际工作)用它自己的 AMethod
参数覆盖该属性。因此,您必须直接调用 DoRequest()
:
procedure DoRequest(const AMethod: TIdHTTPMethod; AURL: string;
ASource,AResponseContent: TStream; AIgnoreReplies: array of Int16); virtual;
TIdHTTPMethod
只是一个 string
,因此您可以传入任何您想要的方法名称。
但是,DoRequest()
在 protected
1 中被声明为 TIdCustomHTTP
,因此您必须使用后代/访问器类来访问它,例如:
type
TIdHTTPAccess = class(TIdHTTP)
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TIdHTTPAccess(IdHTTP1).DoRequest('GO','http://127.0.0.1:1308/...',ParamsAsNeeded...);
end;
或者,您可以使用 class helper
代替(仅限 Delphi 2006+),例如:
type
TIdHTTPHelper = class helper for TIdHTTP
procedure Go(AURL: String; ParamsAsNeeded...);
end;
procedure TIdHTTPHelper.Go(AURL: String; ParamsAsNeeded...);
begin
DoRequest('GO',AURL,ParamsAsNeeded...);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
IdHTTP1.Go('http://127.0.0.1:1308/...',ParamsAsNeeded...);
end;
1:Indy 的问题跟踪器中有一个关于此问题的未决票:#254 Make TIdHTTP.DoRequest() public。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。