You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取企业内网JSON接口返回HTML表格的问题及解决

内网API请求返回HTML而非JSON的问题解决

问题场景

我尝试从公司内网读取JSON数据,已经配置了代理:

  • 要么使用系统代理:System.setProperty("java.net.useSystemProxies", "true");
  • 要么手动指定代理地址:System.setProperty("https.proxyHost", "XX.XX.XX.XX"); System.setProperty("https.proxyPort", "XXXX");

在公网环境调用公开API时一切正常,但请求公司内部API时,返回的不是预期的JSON,而是一段HTML表格:

statusmessage_codedevicesmessage
1SUCCESSArraySuccess

之前试过两种读取方式都没解决问题:

  • 使用IOUtils.toString(url, Charset.forName("UTF-8"));
  • 基于URLConnection的读取逻辑:
    URLConnection yc = oracle.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
    

问题根源

公司内部的API大概率是根据请求头的Accept字段来返回不同格式的响应——当请求没有明确指定接受JSON时,API默认返回了更适合浏览器展示的HTML表格格式。

解决方案

核心就是在请求中添加Accept: application/json请求头,明确告诉服务器我们需要JSON格式的响应。最终解决的代码如下:

URL url = new URL(sURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
// 关键:指定客户端期望接受JSON格式
conn.setRequestProperty("Accept", "application/json");

BufferedReader br = new BufferedReader(new InputStreamReader( (conn.getInputStream())));
// 后续可读取br流中的内容并解析为JSON对象

补充说明

  • HttpURLConnection会自动沿用你之前配置的系统代理属性,不需要额外重新配置代理;
  • 这个方法的本质是通过请求头和服务器做“协商”,确保返回的内容格式符合预期,很多企业内网API都会做这种多格式响应支持。

内容的提问来源于stack exchange,提问作者Henry Lancy Muschett Oliva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:23:20