6

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

请参考下页的“ClientLogin Response”部分:

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

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

问题是 Indy IdHTTP 组件在 403 上抛出异常,响应内容为空。到目前为止,我还没有找到获取此内容的方法。我已经尝试将对 Post 的调用包装在尝试中...除了读取响应流之外,但它在 403 上始终为空。

我该怎么做呢?

4

2 回答 2

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 是相似的。)

于 2009-03-03T20:34:42.617 回答
3

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

但是应该很容易适应将CheckException响应写入的函数IdHTTP.Response.ContentStream

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

于 2009-03-03T20:14:18.097 回答