我如何使HttpURLConnection使用代理?

如果我这样做…

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

它打印

 Proxy? false 

问题是,我在一个代理。 JVM从Windows获取代理信息的位置? 我如何设置? 我的所有其他应用程序似乎完全满意我的代理。

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

如果你的代理需要authentication,它会给你回应407。

在这种情况下,你需要下面的代码:

  Authenticator authenticator = new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return (new PasswordAuthentication("user", "password".toCharArray())); } }; Authenticator.setDefault(authenticator); 

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

通过两个系统属性支持代理: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); 

在openConnection之前设置以下内容,

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

如果代理需要authentication,

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

你也可以设置

 -Djava.net.useSystemProxies=true 

在Windows和Linux上,这将使用系统设置,所以你不需要重复自己(DRY)

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

核准的答案将工作…如果你知道你的代理主机和端口=)。 但是,如果你正在寻找代理主机和端口下面的步骤应该帮助

如果给出自动configuration的代理:那么

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

2>从您的浏览器通过IE浏览器 – >工具 – >互联网选项 – >连接 – >局域网设置 – >获取地址,并在URL例如:作为http://autocache.abc.com/并input,文件将以;.pac格式下载,保存到桌面

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

在您的编辑器中,会出现如下内容:

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

在5分钟内从maven的 bekur荣誉不工作

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

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

对于Java 1.8及更高版本,您必须将-Djdk.http.auth.tunneling.disabledSchemes=设置为使用基本授权与https协同工作的代理。