Indy的TIdHttp
类在最近的版本中有一个Delete()
例程。但由于某种原因,这是一个程序,而不是一个功能。 Put()
,Get()
等都是返回响应正文内容的函数。作为字符串或将其传递给TStream
。 Delete()
无法做到这一点,这与DELETE
的定义相矛盾:
如果响应包括描述状态的实体,则成功响应应为200(OK),如果操作尚未执行,则应为202(已接受);如果已执行操作但响应为204(无内容)不包括实体。
然后我尝试使用GetResponse()
,但这只是优雅地关闭了我的连接,而没有填写响应。
那么如何从DELETE响应中读取响应主体的内容?
答案 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;