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

为何打印HttpURLConnection请求属性时Authorization属性在某方式中缺失?

问题解答

你遇到的问题核心在于方法用途和调用时机的错误:

  1. 方法功能混淆
    getHeaderFields()的作用是获取服务器返回的响应头,而非你设置的请求头;而getRequestProperties()才是专门用来获取你通过setRequestProperty()配置的请求头的方法。

  2. 调用时机错误
    你在调用hpcon.connect()、甚至还没发送请求体的时候就调用了getHeaderFields(),此时请求还未发送给服务器,服务器没有返回任何响应,这个方法返回的Map几乎是空的,自然看不到Authorization属性。

只有在hpcon.connect()执行完成、服务器返回响应后,调用getHeaderFields()才能拿到有效的响应头数据,但即便如此,响应头里也不会包含你发送的Authorization请求头(除非服务器特意把这个头带回响应)。

你的代码中,前一种和第三种使用getRequestProperties()的循环能正常打印Authorization,而第二种用getHeaderFields()的循环看不到,就是这个原因。

调整打印时机后的代码参考

URL url = new URL("api-url");
HttpURLConnection hpcon = (HttpURLConnection)url.openConnection();
byte[] authBytes = grantprovider.getBytes(StandardCharsets.UTF_8);
String grant_encoded = Base64.getEncoder().encodeToString(authBytes);
hpcon.setRequestProperty("Authorization", "Basic " + grant_encoded);
hpcon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
hpcon.setRequestMethod("POST");
hpcon.setDoInput(true);
hpcon.setDoOutput(true);
hpcon.setUseCaches(false);

// 打印请求头(正确方式)
Map<String, java.util.List<String>> map = hpcon.getRequestProperties();
for (Map.Entry<String, java.util.List<String>> entry : map.entrySet())
{
    System.out.println("Key : " + entry.getKey() + " ,Value : " + entry.getValue());
}

String postData = "grant_type=client_credentials";
try(OutputStream os = hpcon.getOutputStream()) {
   byte[] input = postData.getBytes("utf-8");
   os.write(input, 0, input.length);
}

// 发送请求并获取响应后,再打印响应头
hpcon.connect();
Map<String, java.util.List<String>> hdrs = hpcon.getHeaderFields();
Set<String> hdrKeys = hdrs.keySet();
for (String k : hdrKeys) {
   System.out.println("Property Key: " + k + " - Property Value: " + hdrs.get(k));
}

// 再次打印请求头(验证)
for (Map.Entry<String, java.util.List<String>> entries : hpcon.getRequestProperties().entrySet()) {
   String values = "";
   for (String value : entries.getValue()) {
       values += value + ",";
   }
   System.out.println("Request - " + entries.getKey() + " - " +  values );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:33:23