1

我有一个问题HttpsURLConnection- 没有使用代理。
这是代码:

//proxy
String type = "https";
System.getProperties().put(type + ".proxyHost", host);
System.getProperties().put(type + ".proxyPort", port);
System.getProperties().put(type + ".proxyUser", username);
System.getProperties().put(type + ".proxyPassword", password);

/*some SSL stuff*/

//connection
URL url = new URL(url0);
URLConnection urlConnection = url.openConnection();
urlConnection.setUseCaches(false);
urlConnection.setDoInput(true);
urlConnection.setDoOutput(false);           
urlConnection.setRequestProperty("Connection", "Keep-Alive");   

HttpsURLConnection httpConn = (HttpsURLConnection)urlConnection;
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestProperty("Proxy-Authorization", "Basic " + Base64Converter.encode(username + ":" + password));
httpConn.connect();

所有代理设置都被连接忽略并且httpConn.usingProxy()false.
我还尝试将Proxy实例传递给url.openConnection()并将代理登录名/密码设置为 default Authenticator。在那种情况下,连接使用了代理,但我得到了 407,所以看来 Authenticator 对我来说不能正常工作。

4

2 回答 2

2

如何让 HttpURLConnection 使用代理?

从 java 1.5 开始,您还可以将 java.net.Proxy 实例传递给 openConnection() 方法:

//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);

如果您的代理需要身份验证,它将给您响应 407。

在这种情况下,您将需要以下代码:

Authenticator authenticator = new Authenticator() {

    public PasswordAuthentication getPasswordAuthentication() {
        return (new PasswordAuthentication("user",
                "password".toCharArray()));
    }
};
Authenticator.setDefault(authenticator);
于 2013-09-02T07:28:08.883 回答
1
System.getProperties().put(type + ".proxyUser", username);
System.getProperties().put(type + ".proxyPassword", password);

根据官方文档,JRE 不承认其中任何一个。我相信 Apache HTTP 客户端可能会这样做,但不要引用我的话。

你需要安装一个java.net.Authenticator.

于 2013-09-02T08:17:41.070 回答