在 Java 中配置网络代理,常见有几种方式,取决于你是全局 JVM 代理、某个连接代理,还是框架/库(如 Spring、OkHttp)代理。下面系统讲一下。
在启动 Java 程序时加参数:
java \
-Dhttp.proxyHost=127.0.0.1 \
-Dhttp.proxyPort=8080 \
-Dhttps.proxyHost=127.0.0.1 \
-Dhttps.proxyPort=8080 \
-Dhttp.nonProxyHosts="localhost|127.0.0.1" \
-jar app.jar
说明:
http.proxyHost / http.proxyPort:HTTP 代理https.proxyHost / https.proxyPort:HTTPS 代理http.nonProxyHosts:不走代理的地址(用 | 分隔)System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8080");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "8080");
⚠️ 注意:
HttpURLConnection 生效Proxy 类import java.net.*;
URL url = new URL("https://example.com");
Proxy proxy = new Proxy(
Proxy.Type.HTTP,
new InetSocketAddress("127.0.0.1", 8080)
);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
conn.connect();
支持类型:
Proxy.Type.HTTPProxy.Type.SOCKS-DsocksProxyHost=127.0.0.1
-DsocksProxyPort=1080
System.setProperty("socksProxyHost", "127.0.0.1");
System.setProperty("socksProxyPort", "1080");
或:
Proxy proxy = new Proxy(
Proxy.Type.SOCKS,
new InetSocketAddress("127.0.0.1", 1080)
);
Java 默认不支持代理认证,需要自定义 Authenticator:
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
"username",
"password".toCharArray()
);
}
});
⚠️ 只对 HttpURLConnection 有效
Proxy proxy = new Proxy(
Proxy.Type.HTTP,
new InetSocketAddress("127.0.0.1", 8080)
);
OkHttpClient client = new OkHttpClient.Builder()
.proxy(proxy)
.build();
HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http");
RequestConfig config = RequestConfig.custom()
.setProxy(proxy)
.build();
SimpleClientHttpRequestFactory factory =
new SimpleClientHttpRequestFactory();
Proxy proxy = new Proxy(
Proxy.Type.HTTP,
new InetSocketAddress("127.0.0.1", 8080)
);
factory.setProxy(proxy);
RestTemplate restTemplate = new RestTemplate(factory);
❓ 代理不生效?
https.proxyHostnonProxyHosts 拦截❓ Docker / 容器?
如果你能告诉我:
HttpURLConnection / OkHttp / HttpClient我可以给你更精确的配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。