Delphi 正在从TIDWTTP获取响应,错误代码为400

Delphi 正在从TIDWTTP获取响应,错误代码为400,delphi,indy,Delphi,Indy,我一直在为API编写Delphi库 我遇到了印第的问题。我使用的是Delphi2010附带的版本。 如果将无效参数传递给其中一个StackApps API,它将返回HTTP错误代码400,然后在响应中它将包含一个包含更多详细信息的JSON对象 通过在Chrome浏览器中访问,您可以看到一个示例。即,和Firefox隐藏JSON 使用WireShark,我可以看到JSON对象是使用下面的代码返回的,但我无法使用Indy访问它 对于这个测试代码,我在表单上删除了一个TIDWTTP组件,并将下面的代码

我一直在为API编写Delphi库

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

通过在Chrome浏览器中访问,您可以看到一个示例。即,和Firefox隐藏JSON

使用WireShark,我可以看到JSON对象是使用下面的代码返回的,但我无法使用Indy访问它

对于这个测试代码,我在表单上删除了一个TIDWTTP组件,并将下面的代码放在一个按钮单击中

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异常。这就好像印第停止阅读回应。因为备忘录1的内容是空的


我正在寻找获取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; 

是的,AIGNoreplies非常擅长忽略回复:-)我还需要得到回复,因此您可以添加:Memo1.Lines.add(IdHTTP1.ResponseText);