我如何使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.proxyHost
和http.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协同工作的代理。