【发布时间】:2010-11-28 19:28:29
【问题描述】:
如果我这样做......
conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());
打印出来
Proxy? false
问题是,我在代理后面。 JVM 在 Windows 上从哪里获取其代理信息?我该如何设置?我的所有其他应用似乎都对我的代理非常满意。
【问题讨论】:
如果我这样做......
conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());
打印出来
Proxy? false
问题是,我在代理后面。 JVM 在 Windows 上从哪里获取其代理信息?我该如何设置?我的所有其他应用似乎都对我的代理非常满意。
【问题讨论】:
这在互联网上很容易回答。设置系统属性http.proxyHost 和http.proxyPort。您可以使用System.setProperty() 执行此操作,或者使用-D 语法从命令行执行此操作。编辑:根据评论,为 HTTPS 设置 https.proxyPort 和 https.proxyHost。
【讨论】:
在打开连接之前设置以下内容,
System.setProperty("http.proxyHost", "host");
System.setProperty("http.proxyPort", "port_number");
如果代理需要身份验证,
System.setProperty("http.proxyUser", "user");
System.setProperty("http.proxyPassword", "password");
【讨论】:
通过两个系统属性支持代理: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);
【讨论】:
commons-httpclient 相比的主要区别是什么?由于 Java 支持代理和身份验证(正如您在此处提到的 stackoverflow.com/questions/1626549/…),对于简单的情况(例如从公共 HTTP 服务器检索一个文件),没有理由使用 Apache 库。你有什么建议?
systemProperties没有被connection使用!
从 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);
【讨论】:
new PasswordAuthentication("domainName\\user", "password".toCharArray());
你也可以设置
-Djava.net.useSystemProxies=true
在 Windows 和 Linux 上,这将使用系统设置,因此您无需重复自己 (DRY)
http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html#Proxies
【讨论】:
System.setProperty 为https.proxyHost 和https.proxyPort 出于某种原因没有减少芥末时,这在我的公司代理后面起作用。
批准的答案将起作用......如果您知道您的代理主机和端口 =) 。但如果您正在寻找代理主机和端口,以下步骤应该会有所帮助
如果给出了自动配置的代理:那么
1> 打开 IE(或任何浏览器)
2>通过IE->Tools->internet从浏览器获取url地址 选项->连接->局域网设置->获取地址并输入网址,例如:as http://autocache.abc.com/ 并回车,将下载一个文件 .pac 格式,保存到桌面
3> 在 textpad 中打开 .pac 文件,识别 PROXY:
在你的编辑器中,它会是这样的:
返回 "代理 web-proxy.ind.abc.com:8080; 代理 proxy.sgp.abc.com:8080";
感谢maven in 5 min not workingbekur
一旦你有了主机和端口,就可以进入这个,你就可以开始了
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 一起使用。
【讨论】: