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

请求指定URL获取JSON时触发java.io.IOException:403错误求助

解决API调用403权限错误的方案

我一眼就注意到你代码里的授权请求头格式有问题,这大概率是导致403错误的核心原因。咱们一步步来梳理解决:

1. 先定位问题根源

403状态码明确表示服务器拒绝了你的请求,结合代码片段来看,问题出在这行授权头的写法上:

String key ="Authorization : 402c669e45534f868f5d2dd53c8e345f,a80797e0df9c4696b5494635dae02461";

这里有两个明显的问题:

  • 头名称Authorization和冒号之间多了空格,虽然HTTP规范允许冒号前后有空格,但这种写法容易被服务器解析出错
  • 两个密钥直接用逗号分隔,不符合绝大多数API的授权格式——如果API要求同时传递两个密钥,通常是分成独立的请求头,或者需要指定授权类型(比如Authorization: ApiKey <key1>,<key2>,具体得看API文档)

2. 修正后的代码示例

不要把完整的头字符串直接赋值,应该通过HttpURLConnection的setRequestProperty方法单独设置请求头。以下是调整后的完整代码:

InputStream is = null;
JsonReader rdr = null;
OutputStreamWriter out = null;
String path = "http://test.dotconnect.io/data_api/reports/1bf4bc70b31d4d92b50a6d965c52fcec";
int timeout = 6000000;

try {
    URL url = new URL(path);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET"); // 根据API要求切换GET/POST
    conn.setConnectTimeout(timeout);
    conn.setReadTimeout(timeout);

    // 这里提供两种常见的授权头设置方式,你需要对照API文档选对应格式
    // 方式1:两个密钥作为独立请求头(多数API的常规做法)
    conn.setRequestProperty("X-API-Key", "402c669e45534f868f5d2dd53c8e345f");
    conn.setRequestProperty("X-Secret-Key", "a80797e0df9c4696b5494635dae02461");

    // 方式2:如果API要求在Authorization头里组合两个密钥(需确认格式)
    // conn.setRequestProperty("Authorization", "ApiKey 402c669e45534f868f5d2dd53c8e345f,a80797e0df9c4696b5494635dae02461");

    // 发起请求并处理响应
    int responseCode = conn.getResponseCode();
    if (responseCode == HttpURLConnection.HTTP_OK) {
        is = conn.getInputStream();
        rdr = JsonReaderFactory.createReader(is);
        // 在这里处理返回的JSON数据
    } else {
        System.err.println("Server returned HTTP response code: " + responseCode + " for URL: " + path);
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    // 确保资源关闭(也可以用try-with-resources语法简化)
    try {
        if (rdr != null) rdr.close();
        if (is != null) is.close();
        if (out != null) out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

3. 额外排查点

如果修正后还是报错,可以试试这几个方向:

  • 切换HTTPS协议:有些API会拒绝HTTP请求,只接受HTTPS,把URL改成https://test.dotconnect.io/...试试
  • 验证密钥有效性:确认你的两个密钥没有过期,且权限范围包含访问该报表接口
  • 补充必要请求头:部分API要求设置User-Agent模拟浏览器请求,可添加:conn.setRequestProperty("User-Agent", "Mozilla/5.0")

内容的提问来源于stack exchange,提问作者Rada Aflah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:24:19