【问题标题】:Delphi Indy no response content after 404Delphi Indy 404后无响应内容
【发布时间】:2017-03-16 04:05:42
【问题描述】:

当 Indy 得到 404 时,我无法获取响应内容,它总是空的。

例如,使用 Indy 访问 https://www.etsy.com/people/car,我得到一个 404 并且 contentstream(或分配的流)只是空的。 对THttpClient做同样的事情,我也得到了404,而且在响应流中也得到了404页面的内容。

所以我的问题是,当 Indy 是 404 时,如何获取响应内容?

【问题讨论】:

标签: delphi indy


【解决方案1】:

使用 Indy 访问 https://www.etsy.com/people/car,我得到一个 404 并且 contentstream(或分配的流)只是空的。

这是设计的默认行为,以防止使用未请求的意外错误数据破坏输出。

当 Indy 是 404 时,如何获取响应内容?

有两种可能的方法:

  1. 默认情况下,TIdHTTP 在 HTTP 错误时引发 EIdHTTPProtocolException 异常。响应数据将在其ErrorMessage 属性中。

  2. 您可以通过以下任一方式避免引发的异常:

    • TIdHTTP.HTTPOptions 属性中启用hoNoProtocolErrorException 标志。

    • 使用具有AIgnoreReplies 参数的TIdHTTP.Get() 的重载版本,在该参数中传递404(或您想要的任何其他错误响应代码)。

    无论哪种方式,默认情况下响应数据仍将被丢弃。您可以通过在TIdHTTP.HTTPOptions 属性中启用最近添加的hoWantProtocolErrorContent 标志来避免这种情况(请参阅New TIdHTTP flags and OnChunkReceived event)。

【讨论】:

  • 谢谢雷米,回答完全接受。我使用 ErrorMessage 值,它现在工作得很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多