为什么HttpURLConnection不发送多个标头?

时间:2018-04-28 15:13:26

标签: java

我正在尝试使用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]}

为什么只发送一个标头?

1 个答案:

答案 0 :(得分:3)

如果您使用线鲨或类似物,您应该看到两个标题都已发送。

HttpURLConnection实现类中有一些代码可以过滤掉getRequestProperties()返回的映射中的敏感标头。过滤掉的其中一个标题是"Authorization"

过滤的标头(在Java 8中)是"Proxy-Authorization""Authorization""Cookie""Cookie2"