在 Java 中设置**网络代理(Proxy)**有多种方式,取决于你是做 HTTP 请求、Socket 连接,还是 全局代理。下面按常见场景给你一个完整说明。
适合所有基于 Java 的网络请求(HttpURLConnection、很多第三方库)。
java \
-Dhttp.proxyHost=127.0.0.1 \
-Dhttp.proxyPort=7890 \
-Dhttps.proxyHost=127.0.0.1 \
-Dhttps.proxyPort=7890 \
-jar app.jar
-Dhttp.nonProxyHosts="localhost|127.0.0.1|*.example.com"
注意:
nonProxyHosts用|分隔,不是逗号
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "7890");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "7890");
System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");
⚠️ 必须在 网络请求之前设置
Proxy 类(精细控制 ✅)适合你只想让某一次请求走代理。
import java.net.*;
public class ProxyTest {
public static void main(String[] args) throws Exception {
Proxy proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("127.0.0.1", 7890));
URL url = new URL("https://www.google.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
System.out.println(code);
}
}
import java.net.*;
import java.net.http.*;
public class HttpClientProxy {
public static void main(String[] args) throws Exception {
ProxySelector selector = ProxySelector.of(
new InetSocketAddress("127.0.0.1", 7890)
);
HttpClient client = HttpClient.newBuilder()
.proxy(selector)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.google.com"))
.build();
client.send(request, HttpResponse.BodyHandlers.discarding());
}
}
-DsocksProxyHost=127.0.0.1
-DsocksProxyPort=1080
Proxy proxy = new Proxy(Proxy.Type.SOCKS,
new InetSocketAddress("127.0.0.1", 1080));
✅ SOCKS 代理对 TCP 层生效(Socket、HTTP 都可用)
HttpHost proxy = new HttpHost("127.0.0.1", 7890);
RequestConfig config = RequestConfig.custom()
.setProxy(proxy)
.build();
Proxy proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("127.0.0.1", 7890));
OkHttpClient client = new OkHttpClient.Builder()
.proxy(proxy)
.build();
| 问题 | 说明 |
|---|---|
| HTTPS 不走 http.proxy | HTTPS 必须单独设置 |
| 代理不生效 | 顺序问题,必须在请求前 |
| Docker / K8s 环境 | 可能需要 host.docker.internal |
| 认证代理 | 需用 Authenticator.setDefault() |
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "password".toCharArray());
}
});
| 场景 | 推荐方式 |
|---|---|
| 全局代理 | JVM 参数 ✅ |
| 单个请求 | Proxy 类 |
| 新项目 | Java 11+ HttpClient |
| SOCKS | Proxy.Type.SOCKS |
如果你愿意,可以告诉我:
我可以给你完全贴合你项目的配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。