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的排查方案
- 打印请求日志确认
Authorization头是否正确携带,内容是否和预期一致 - 用相同token在接口调试工具中调用同接口,确认token本身有效、接口路径正确
- 确认接口要求的授权前缀确实为
Bearer,部分特殊接口会使用其他自定义前缀
内容的提问来源于stack exchange,提问作者abdv19
相关产品推荐
相关产品推荐

