当Indy获得404时,我无法获得响应内容,它总是空着。
例如,使用Indy访问https://www.etsy.com/people/car,我得到404,内容流(或分配的流)只是空的。 对THttpClient做同样的事情,我也得到了404,但也获得了响应流中404页面的内容。
所以我的问题是,当它是404时,我怎样才能获得Indy的响应内容?
答案 0 :(得分:5)
使用Indy访问https://www.etsy.com/people/car,我得到404,内容流(或指定的流)只是空的。
这是设计上的默认行为,以防止使用未请求的意外错误数据破坏输出。
我怎样才能获得Indy的404响应内容?
有两种可能的方式:
默认情况下,TIdHTTP
会在HTTP错误上引发EIdHTTPProtocolException
异常。响应数据将位于其ErrorMessage
属性中。
您可以通过以下方式避免引发异常:
启用hoNoProtocolErrorException
属性中的TIdHTTP.HTTPOptions
标记。
使用具有TIdHTTP.Get()
参数的AIgnoreReplies
的重载版本,在该参数中传递404(或任何其他错误响应代码)。
无论哪种方式,默认情况下仍会丢弃响应数据。您可以避免在hoWantProtocolErrorContent
属性中启用最近添加的TIdHTTP.HTTPOptions
标记(请参阅New TIdHTTP flags and OnChunkReceived event)。