Indy HTTP:读取403上的响应内容

时间:2009-03-03 19:52:51

标签: delphi http indy

我在使用带有Google Contacts API的Indy HTTP(在Delphi中)时遇到了问题。

请参阅以下页面上的“ClientLogin响应”部分:

http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html

当身份验证不正确或发生错误时,服务器返回403 ...正如预期的那样。然而,根据该文档,客户端需要响应内容中的信息,例如,错误原因和验证码URL等

问题是Indy IdHTTP组件在403上抛出异常,响应内容为空。到目前为止,我找不到这个内容。我尝试将调用包装到Post中...除了然后读取响应流,但它总是在403上空。

我将如何做到这一点?

2 个答案:

答案 0 :(得分:8)

我找到了解决方案。看起来内容存储在EIdHTTPProtocolException的ErrorMessage字段中。

try 
   http.Post('https://www.google.com/accounts/ClientLogin', slReq);
except
   on E: EIdHTTPProtocolException do
      Memo1.Lines.Add(E.ErrorMessage);
end;

似乎可以解决问题。

(顺便说一下,我正在使用Indy 9.我相信Indy 10很相似。)

答案 1 :(得分:3)

你是对的。似乎在TIdHTTPProtocol.ProcessResponse中读取了响应但在之后丢弃了。 (甚至没有设定为零)

但应该很容易调整CheckException函数将响应写入IdHTTP.Response.ContentStream

也许您可以提交错误报告或功能请求。