delphi - 如何在 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;
或者,您可以使用 aclass 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。
推荐阅读
- r - 将数据从一行复制到 R data.table 中的新行
- javascript - 如何在 .NET Core MVC 中使用 AJAX 调用刷新视图
- function - CMake:从函数内定义范围中的访问变量
- javascript - 根据计算出的数字显示不同的图像
- javascript - 使用 TinyMce 打开图像对话框时如何防止 Windows 资源管理器打开?
- tensorflow - 在 GradientTape(persistent=True) 之后调用 __exit_
- sed - sed 删除字符串直到下一次出现
- vue.js - Vue UI 未在新项目上启动
- javascript - 查找一定时间内的用户数量
- c# - 当文件明显应该存在时,为什么 JsonConfigurationSource 会抛出 FileNotFoundException?