Delphi Indy在404之后没有回复内容

时间:2017-03-16 04:05:42

标签: delphi indy

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

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

所以我的问题是,当它是404时,我怎样才能获得Indy的响应内容?

1 个答案:

答案 0 :(得分:5)

  

使用Indy访问https://www.etsy.com/people/car,我得到404,内容流(或指定的流)只是空的。

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

  

我怎样才能获得Indy的404响应内容?

有两种可能的方式:

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

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

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

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

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