如何使用TIdHttp获取DELETE的响应文本?

时间:2015-01-08 12:00:18

标签: delphi indy

Indy的TIdHttp类在最近的版本中有一个Delete()例程。但由于某种原因,这是一个程序,而不是一个功能。 Put()Get()等都是返回响应正文内容的函数。作为字符串或将其传递给TStreamDelete()无法做到这一点,这与DELETE的定义相矛盾:

  

如果响应包括描述状态的实体,则成功响应应为200(OK),如果操作尚未执行,则应为202(已接受);如果已执行操作但响应为204(无内容)不包括实体。

Source

然后我尝试使用GetResponse(),但这只是优雅地关闭了我的连接,而没有填写响应。

那么如何从DELETE响应中读取响应主体的内容?

1 个答案:

答案 0 :(得分:7)

您需要更新Indy安装。 2013年9月在SVN修订版5056中为此功能请求添加了获取DELETE方法响应的超载:

Add overloads for TIdHTTP Delete() and Options() methods that can output a response's message body

如果您因某些原因不想更新Indy,可以将TIdHTTP组件子类化,并添加一个将响应流传递给DoRequest方法的方法,例如:< / p>

type
  TIdHTTP = class(IdHTTP.TIdHTTP)
  public
    procedure DeleteEx(AURL: string; AResponseContent: TStream);
  end;

implementation

{ TIdHTTP }

procedure TIdHTTP.DeleteEx(AURL: string; AResponseContent: TStream);
begin
  DoRequest(Id_HTTPMethodDelete, AURL, nil, AResponseContent, []);
end;