如何使 HttpURLConnection 使用代理?

如果我这么做。

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

它会打印出来

Proxy? false

问题是,我有个代理人。在 Windows 上,JVM 从哪里获得代理信息?我该怎么安排?我其他的应用程序似乎对我的代理都很满意。

303186 次浏览

这个问题在互联网上很容易回答。设置系统属性 http.proxyHosthttp.proxyPort。您可以使用 System.setProperty()完成这项工作,也可以使用 -D语法从命令行完成这项工作。编辑: 根据评论,为 HTTPS 设置 https.proxyPorthttps.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);

由于 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);

您还可以设置

-Djava.net.useSystemProxies=true

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

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

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

如果给定了自动配置的代理,则

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

2 > 通过 IE-> Tools-> Internet 从浏览器获取网址 选项-> 连接-> 局域网设置-> 获取地址并输入 url 例如: as Http://autocache.abc.com/ ,然后输入,一个文件将会在 . pac 格式,保存到桌面

3 > 在文本板中打开.pac 文件,识别代理:

在你的编辑器里,它会变成这样:

返回“代理 web-PROXY.ind.abc.com : 8080; 代理 Proxy.sgp.abc.com : 8080”;

来自 Maven 在5分钟内失效的 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。