首页 > 解决方案 > 如何在 TIdHTTP 中指定自定义 HTTP 方法?

问题描述

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

在邮递员中,我通过在下拉列表中输入方法名称来实现这一点,我可以在 GET/POST/PUT/... 之间进行选择:

邮递员中的自定义方法

如何在 TIdHttp 中实现这一点?在这个例子中,HTTP 方法不是 GET 而是 GO(GO 当然是自定义的而不是标准的)。

谢谢。

标签: delphipostmanidhttp

解决方案


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()声明为protected1 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


推荐阅读