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 帮助附带的帮助文件中,这些选项的记录也很少(Help→Third-Party Help→Indy Library帮助).
要将响应主体作为字符串使用 Get
/Put
/Post
不变量 returns 字符串,而不是 TIdHTTP.Response.ResponseText
或 TIdHTTP.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}
我正在尝试绕过 Indy idHTTP 组件,并且在 GET/PUT/POST 之后检索服务器响应时遇到一些问题,如果它不是 200 OK。 即使我禁用 ProtocolException,Response.ResponseText 和 reutrned StringStream 只显示 400 错误,但不显示服务器传输的内容。
我怎样才能得到这些数据???
提前谢谢
为了避免在非 2xx 状态下被 TIdHTTP
组件丢弃响应主体,您还需要在 HttpOptions
中使用 hoWantProtocolErrorContent
。不幸的是,即使在 RAD Studio 帮助附带的帮助文件中,这些选项的记录也很少(Help→Third-Party Help→Indy Library帮助).
要将响应主体作为字符串使用 Get
/Put
/Post
不变量 returns 字符串,而不是 TIdHTTP.Response.ResponseText
或 TIdHTTP.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}