You need to enable JavaScript to run this app. URLConnection设置Authorization请求头未生效返回401如何解决
优惠活动
大模型
产品
解决方案
定价
更多

URLConnection设置Authorization请求头未生效返回401如何解决

问题根因

你代码中出现401的核心原因是请求头设置对象不匹配:
你将Authorization授权头设置在了URLConnection实例上,但实际发送请求用的是CloseableHttpClient执行的HttpGet实例,该实例从未设置过授权头,因此发往接口的请求没有携带授权信息,直接被安全拦截返回401。

其他潜在风险点

  • 你当前示例中写死了token字符串,实际使用时需要替换为接口方颁发的真实有效token,确认token未过期、权限范围符合当前接口要求
  • 确认当前运行环境信任目标接口的HTTPS证书,不会因证书校验失败导致请求异常
  • 你当前的授权头拼接格式"Bearer " + token是符合规范的,无需调整

修复后代码示例

public class Hello {

    static WireMockServer wireMockServer = new WireMockServer(
                    wireMockConfig().dynamicPort().dynamicHttpsPort());

    static CloseableHttpClient httpClient = HttpClients.createDefault();
    // 替换为实际获取到的有效token
    static String authHeader = "Bearer " + "实际有效token";
    public static void main(String[] args) throws IOException {
        wireMockServer.start();
        String url = "https://sandbox.predera.com/aiq/api/projects";
        HttpGet httpGet = new HttpGet(url);
        // 给实际发请求的HttpGet对象设置授权头
        httpGet.setHeader("Authorization", authHeader);
        HttpResponse response = httpClient.execute(httpGet);
        int statusCode = response.getStatusLine().getStatusCode();
        wireMockServer.stop();
        System.out.print(statusCode);
    }
}

仍返回401的排查方案

  1. 打印请求日志确认Authorization头是否正确携带,内容是否和预期一致
  2. 用相同token在接口调试工具中调用同接口,确认token本身有效、接口路径正确
  3. 确认接口要求的授权前缀确实为Bearer,部分特殊接口会使用其他自定义前缀

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 01:06:04