【问题标题】:PUT command with Indy 8.0.26 in Delphi 6Delphi 6 中使用 Indy 8.0.26 的 PUT 命令
【发布时间】:2018-05-09 09:59:15
【问题描述】:

我可以在 Indy 8 中使用TIdHTTP 发送POST 请求,但我不知道如何发送PUT 请求。

var
  Params:TStrings;
  Resp: TMemoryStream;//TMemoryStream;
  URI, sResp: AnsiString;
begin
   try
      Params := TStringList.Create;
      Params.Add(EdPost.Text);
      //Params.Add('Method=PUT');   ???
      Resp := TMemoryStream.Create;
      URI := EdUri.Text + Edit6.Text;   //
      Http1.Request.ContentType := 'application/json';
      Http1.Request.ExtraHeaders.Values['Authorization'] := 'Bearer ' + sTocken;
      //Http1.Request.ExtraHeaders.Values['Method'] :='PUT';    ???
      Http1.Post(URI, Params, Resp);

【问题讨论】:

    标签: delphi indy put delphi-6 indy-8


    【解决方案1】:

    Indy 8 中的TIdHTTP 根本不支持PUT 请求。它仅支持HEADGETPOST 请求。不幸的是,您不能手动强制 PUT 请求(无需更改 Indy 的源代码),因为 TIdHTTP.DoRequest() 方法采用仅定义这 3 个 HTTP 请求的 TIdHTTPMethod 枚举。

    Indy 9 添加了对额外 HTTP 请求的支持:OPTIONSTRACEPUTDELETECONNECT

    Indy 10 增加了对用户指定的 HTTP 方法的支持,因此 TIdHTTP 不再局限于硬编码的请求子集。

    Indy 的当前版本(在撰写本文时)是 10.6.2.5457,并且仍然支持 Delphi 6 (1)

    我强烈建议您从 Indy 8 升级,因为它已经过时并且不再受到 Indy 开发人员的支持。请不要使用它。如果您不想一直升级到 Indy 10,那么至少升级到 Indy 9(尽管它也不再受支持,除了错误修复)。

    话虽如此,Indy 8 有一个可能的解决方法:如果您将数据发送到的 HTTP 服务器支持“动词隧道”,那么您可以使用TIdHTTP.Post() 发送POST 请求,同时指示服务器将请求视为PUT,例如:

    // Sadly, there is no *standard* HTTP header for verb tunneling.
    // Different vendors use different headers:
    //
    // Most vendors use 'X-HTTP-Method-Override'
    // Microsoft uses 'X-HTTP-Method'
    // IBM uses 'X-METHOD-OVERRIDE'
    //
    // Send whichever one is appropriate for your particular server, or
    // just send them all and let the server work it out...
    
    Http1.Request.ExtraHeaders.Values['X-HTTP-Method-Override'] := 'PUT';
    Http1.Request.ExtraHeaders.Values['X-HTTP-Method'] := 'PUT';
    Http1.Request.ExtraHeaders.Values['X-METHOD-OVERRIDE'] := 'PUT';
    Http1.Post(URI, ...);
    

    (1):在未来的 Indy 11 维护版本中将放弃对 Delphi 的 Unicode 前版本(包括 Delphi 6)的支持。 Indy 10 将是支持旧编译器的最后一个版本。

    【讨论】:

      猜你喜欢
      • 2012-11-25
      • 2012-05-04
      • 1970-01-01
      • 2019-10-19
      • 2012-02-23
      • 2021-11-30
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多