【问题标题】:How to get response content even if connection gives error in IdHttp?即使连接在 IdHttp 中出现错误,如何获取响应内容?
【发布时间】:2013-09-04 03:44:31
【问题描述】:

当像这样使用 TIdHttp 时:

Memo1.Text := IdHTTP1.post(url,data);

如果没有给出 http 错误,我可以获得对 memo1 的响应内容。但是当它给出 http 错误请求时,Indy 并没有给我内容。我也在使用 try..except 但它只会阻止错误框并且仍然没有给我内容。

即使返回 http 错误,我如何获取内容?

【问题讨论】:

  • 不,我的意思是当它给出 http 错误请求 400 时,我可以在 Fiddler 中看到它的响应内容,所以它肯定会发送内容,但我无法在 delphi 中获取它。 delphi 只是给出错误。
  • 在此评论 (stackoverflow.com/questions/7762584/…) 中您说“Firefox 显示内容,即使他收到 HTTP 400 错误请求错误。例如 Internet Explorer 告诉您发生了错误请求并且不显示 XML 内容响应,Indy 的工作方式相同,创建错误消息并丢弃内容。”我想我的问题正是如此。
  • TIdHTTP 不会丢弃内容。它被放置在引发的异常中。详情见我的回答。

标签: delphi delphi-7 indy idhttp


【解决方案1】:

试试这个代码

Try
    Memo1.Text := IdHTTP1.post(url,data);
except on e: EIdHTTPProtocolException do
begin
    memo1.lines.add(idHTTP1.response.ResponseText);
    memo1.lines.add(e.ErrorMessage);
end;

e.ErrorMessage 会给你一些关于错误请求的信息。

【讨论】:

  • 那么不要包括第二个 memo1.lines.add 行。
  • ResponseText 不是“内容”。这只是状态文本。我需要内容。
  • 感谢您的回答。这是我的错。当我禁用 hoNoProtocolErrorException 时,ErrorMessage 给了我响应内容。
【解决方案2】:

当发生 HTTP 错误时,TIdHTTP 会引发 EIdHTTPProtocolException 异常。该异常在其ErrorCode 属性中包含HTTP 状态代码,在其Message 属性中包含HTTP 状态文本,在其ErrorMessage 属性中包含响应数据。

【讨论】:

  • 感谢您的回答。当我禁用 hoNoProtocolErrorException ErrorMessage 给了我响应数据。
猜你喜欢
  • 2020-02-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 2017-04-12
相关资源
最近更新 更多