我一直在为StackApps API 编写一个 Delphi 库。
我遇到了 Indy 的问题。我使用的是 Delphi 2010 附带的版本。如果您将无效参数传递给 StackApps API 之一,它将返回 HTTP 错误代码 400,然后在响应中它将包含一个带有更多详细信息的 JSON 对象。
通过在 Chrome 浏览器中访问http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose,您可以看到一个示例。IE 和 Firefox 隐藏 JSON。
使用 WireShark,我可以看到使用下面的代码返回了 JSON 对象,但我无法使用 Indy 访问它。
对于这个测试代码,我在表单上放置了一个 TIdHttp 组件,并将以下代码放在一个按钮单击中。
procedure TForm10.Button2Click(Sender: TObject);
var
SS : TStringStream;
begin
SS := TStringStream.Create;
IdHTTP1.Get('http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose',SS,[400]);
Memo1.Lines.Text := SS.DataString;
SS.Free;
end;
我通过了 [400] 以便它不会引发 400 异常。就好像 Indy 停止阅读响应一样。因为 Memo1 的内容是空的。
我正在寻找一种获取 JSON 详细信息的方法。