我想通过代理发送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
怎么回事?
我不考虑使用课程Authenticator
或System.setProperty
。我想弄清楚为什么我的代码不能正常用于https,而是用于http。
答案 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