代理仅忽略httpS请求

时间:2015-07-25 17:05:40

标签: java https proxy

我想通过代理发送2种请求:http和https。以下是我执行HTTP请求的方式:

  HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);

和HTTPS:

  HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(proxy);

其余代码相同

//..................
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("ip", 1234));

//..................
conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
conn.setRequestProperty("Proxy-Authorization", auth);
conn.setDoInput(true);
System.out.println("Response Code : " + conn.getResponseCode());
System.out.println("\n");

在HTTP的情况下,它返回200和响应的主体,这意味着一切正常。但是,对于HTTPS 请求,它会返回:

Unable to tunnel through proxy. Proxy returns "HTTP/1.0 407 Proxy Authentication Required

怎么回事?

我不考虑使用课程AuthenticatorSystem.setProperty。我想弄清楚为什么我的代码不能正常用于https,而是用于http。

1 个答案:

答案 0 :(得分:0)

您使用基本身份验证架构 根据Oracle更新#8u111

  

在某些环境中,某些身份验证方案可能是   代理HTTPS时不合需要。因此,基本认证   默认情况下,在Java Java Runtime中,scheme已被停用,   通过向jdk.http.auth.tunneling.disabledSchemes添加Basic   网络财产。

因此,您需要清除已清除的disabledSchemes列表 - 或以主静态方法System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");调用
- 或添加JVM参数-Djdk.http.auth.tunneling.disabledSchemes=
- 或使用Apache Common HttpClient