Delphi /w Indy 10:在错误 400 (idHTTP) 后获取内容

Delphi /w Indy 10: Get Content after ERROR 400 (idHTTP)

我正在尝试绕过 Indy idHTTP 组件,并且在 GET/PUT/POST 之后检索服务器响应时遇到一些问题,如果它不是 200 OK。 即使我禁用 ProtocolException,Response.ResponseText 和 reutrned StringStream 只显示 400 错误,但不显示服务器传输的内容。

我怎样才能得到这些数据???

提前谢谢

为了避免在非 2xx 状态下被 TIdHTTP 组件丢弃响应主体,您还需要在 HttpOptions 中使用 hoWantProtocolErrorContent。不幸的是,即使在 RAD Studio 帮助附带的帮助文件中,这些选项的记录也很少(HelpThird-Party HelpIndy Library帮助).

要将响应主体作为字符串使用 Get/Put/Post 不变量 returns 字符串,而不是 TIdHTTP.Response.ResponseTextTIdHTTP.ResponseText 简称,其中包含 status line of HTTP response;例如:HTTP/1.1 400 Bad Request.

示例代码:

var
  IdHTTP: TIdHTTP;
begin
  IdHTTP := TIdHTTP.Create();
  try
    IdHTTP.HTTPOptions := IdHTTP.HTTPOptions + [hoNoProtocolErrorException, hoWantProtocolErrorContent];
    Writeln(IdHTTP.ResponseText);
    Writeln;
    Writeln(IdHTTP.Get('https://postman-echo.com/status/400'));
  finally
    IdHTTP.Free;
  end;
end;

示例输出:

HTTP/1.1 400 Bad Request

{"status":400}