我正在尝试使用HttpURLConnection向我的请求发送多个标头(accept和auth key),但只有第一个被发送。
URL url = new URL(fileOrUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
for (String h : getHeaders()) {
String[] keyval = h.split(":");
if (keyval.length != 2) {
throw new IllegalArgumentException();
}
System.out.println("Setting header " + keyval[0] + ": " + keyval[1]);
conn.addRequestProperty(keyval[0], keyval[1]);
}
System.out.println(conn.getRequestProperties());
return stream = conn.getInputStream();
这导致:
Setting header Accept: application/x-google-protobuf
Setting header Authorization: apikey
{Accept=[ application/x-google-protobuf]}
为什么只发送一个标头?
答案 0 :(得分:3)
如果您使用线鲨或类似物,您应该看到两个标题都已发送。
HttpURLConnection
实现类中有一些代码可以过滤掉getRequestProperties()
返回的映射中的敏感标头。过滤掉的其中一个标题是"Authorization"
。
过滤的标头(在Java 8中)是"Proxy-Authorization"
,"Authorization"
,"Cookie"
和"Cookie2"
。