微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 TIdHTTP 中指定自定义 HTTP 方法?

如何解决如何在 TIdHTTP 中指定自定义 HTTP 方法?

我需要通过指定自定义 HTTP 方法调用 TIDHTTP。

在邮递员中,我通过在下拉列表中输入方法名称来实现此目的,我可以在其中选择 GET/POST/PUT/...:

custom method in postman

如何在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?