如何让HttpURLConnection使用代理?

时间:2009-09-16 13:28:17

标签: java windows http proxy

如果我这样做......

conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());

打印

Proxy? false

问题是,我支持代理。 JVM从哪里获取Windows上的代理信息?我该如何设置?我的所有其他应用程序似乎对我的代理非常满意。

7 个答案:

答案 0 :(得分:312)

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

//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);

答案 1 :(得分:32)

这很容易从互联网上回答。设置系统属性http.proxyHosthttp.proxyPort。您可以使用System.setProperty()执行此操作,也可以使用-D语法从命令行执行此操作。

答案 2 :(得分:19)

通过两个系统属性支持代理:http.proxyHost和http.proxyPort。它们必须分别设置为代理服务器和端口。以下基本示例说明了它:

String url = "http://www.google.com/",
       proxy = "proxy.mydomain.com",
       port = "8080";
URL server = new URL(url);
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",proxy);
systemProperties.setProperty("http.proxyPort",port);
HttpURLConnection connection = (HttpURLConnection)server.openConnection();
connection.connect();
InputStream in = connection.getInputStream();
readResponse(in);

答案 3 :(得分:10)

在openConnection之前设置以下内容,

System.setProperty("http.proxyHost", "host");
System.setProperty("http.proxyPort", "port_number");

如果代理需要身份验证,

System.setProperty("http.proxyUser", "user");
System.setProperty("http.proxyPassword", "password");

答案 4 :(得分:10)

您也可以设置

-Djava.net.useSystemProxies=true

在Windows和Linux上,这将使用系统设置,因此您无需重复自己(干)

http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html#Proxies

答案 5 :(得分:5)

对于Java 1.8及更高版本,您必须设置-Djdk.http.auth.tunneling.disabledSchemes=以使代理使用基本授权使用https。

答案 6 :(得分:2)

批准的答案将有效...如果您知道您的代理主机和端口=)。但是,如果您正在寻找代理主机和端口,下面的步骤应该有帮助

  

如果给出了自动配置的代理:那么

     

1>打开IE(或任何浏览器)

     

2 - ;通过IE->工具 - >互联网从您的浏览器获取网址   option-> connections-> LAN Settings->获取地址并在URL中输入例如:as   http://autocache.abc.com/并输入,将下载一个文件   .pac格式,保存到桌面

     

3>在textpad中打开.pac文件,识别PROXY:

     

在你的编辑器中,它会像:

     

返回“PROXY web-proxy.ind.abc.com:8080; PROXY   proxy.sgp.abc.com:8080" ;

来自maven in 5 min not working

的bekur

一旦你有主机和端口刚刚进入这个和你的好去

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("web-proxy.ind.abc.com", 8080));
        URLConnection connection = new URL(url).openConnection(proxy);