使用IDHTTP发送JSON POST遇HTTP 500时,如何获取详细错误信息?
如何用IDHTTP获取服务器500错误的详细信息
当然可以拿到这些详细错误信息啦!默认情况下IDHTTP遇到非2xx的状态码(比如500)会直接抛出异常,导致你没法直接拿到服务器返回的错误详情,但只要稍微调整一下代码,捕获这个异常就能提取到浏览器里看到的那些内容。
核心思路是:当IDHTTP抛出EIdHTTPProtocolException异常时,它其实已经接收到了服务器返回的响应内容,只是默认流程被中断了。我们只需要在异常处理块里访问IDHTTP.Response.Content,就能拿到服务器返回的详细错误页面或JSON信息,和Chrome开发者工具里看到的完全一致。
给你调整后的代码示例:
var JsonToSend: TStringStream; ResponseContent: string; begin JsonToSend := TStringStream.Create('{"your": "json_data"}', TEncoding.UTF8); try idhttp1.Request.ContentType := 'application/json'; try ResponseContent := idhttp1.Post(URL, JsonToSend); // 请求成功时的处理逻辑 except on E: EIdHTTPProtocolException do begin // 这里获取服务器返回的详细错误内容 ShowMessage('服务器错误详情:' + idhttp1.Response.Content); // 如果错误内容是JSON格式,还可以用JSON解析类进一步处理 // 比如用TJSONObject.ParseJSONValue(idhttp1.Response.Content)来解析 end; end; finally JsonToSend.Free; end; end;
额外提醒两点:
- 如果服务器返回的错误内容有特殊编码,记得结合
idhttp1.Response.ContentEncoding来调整编码,避免乱码; - 有些服务器可能会在500错误时返回JSON格式的错误信息,这时候你可以直接用Delphi的JSON类库(比如
System.JSON单元里的类)来解析,方便提取具体的错误字段。
内容的提问来源于stack exchange,提问作者delphirules
相关产品推荐
相关产品推荐

