我在使用带有Google Contacts API的Indy HTTP(在Delphi中)时遇到了问题。
请参阅以下页面上的“ClientLogin响应”部分:
http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html
当身份验证不正确或发生错误时,服务器返回403 ...正如预期的那样。然而,根据该文档,客户端需要响应内容中的信息,例如,错误原因和验证码URL等
问题是Indy IdHTTP组件在403上抛出异常,响应内容为空。到目前为止,我找不到这个内容。我尝试将调用包装到Post中...除了然后读取响应流,但它总是在403上空。
我将如何做到这一点?
答案 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
也许您可以提交错误报告或功能请求。