加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 从错误代码400的TIdHttp获得响应

发布时间:2020-12-15 03:55:26 所属栏目:大数据 来源:网络整理
导读:我一直在为 StackApps API编写一个Delphi库. 我遇到了Indy的问题.我正在使用Delphi 2010附带的版本. 如果将无效参数传递给其中一个StackApps API,它将返回HTTP错误代码400,然后在响应中它将包含一个包含更多详细信息的JSON对象. 通过访问Chrome浏览器中的htt
我一直在为 StackApps API编写一个Delphi库.

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

通过访问Chrome浏览器中的http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose,您可以看到示例. I.E.和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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读