gpt4 book ai didi

delphi - 从 TIdHttp 获取响应,错误代码为 400

转载 作者:行者123 更新时间:2023-12-03 14:41:14 25 4
gpt4 key购买 nike

我一直在为StackApps编写一个Delphi库。 API。

我在使用 Indy 时遇到了问题。我使用的是 Delphi 2010 附带的版本。如果您将无效参数传递给 StackApps API 之一,它将返回 HTTP 错误代码 400,然后在响应中它将包含一个包含更多详细信息的 JSON 对象。

访问 http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose在 Chrome 浏览器中您可以看到一个示例。 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 详细信息的方法。

最佳答案

从对 Get() 的调用中删除 AIgnoreReplies 参数值。让它正常引发异常。您要查找的 JSON 文本位于 EIdHTTPProtocolException.ErrorMessage 属性中。例如:

procedure TForm10.Button2Click(Sender: TObject); 
begin
try
Memo1.Lines.Text := IdHTTP1.Get('http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose');
except
on E: EIdHTTPProtocolException do begin
if E.ErrorCode = 400 then
Memo1.Lines.Text := E.ErrorMessage
else
raise;
end;
end;
end;

关于delphi - 从 TIdHttp 获取响应,错误代码为 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3018346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com