温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java网络代理怎么设置

发布时间:2026-07-18 10:50:38 来源:亿速云 阅读:86 作者:小樊 栏目:编程语言

在 Java 中设置**网络代理(Proxy)**有多种方式,取决于你是做 HTTP 请求Socket 连接,还是 全局代理。下面按常见场景给你一个完整说明。


一、通过 JVM 参数设置(全局代理,最常用 ✅)

适合所有基于 Java 的网络请求(HttpURLConnection、很多第三方库)。

1️⃣ HTTP / HTTPS 代理

java \
-Dhttp.proxyHost=127.0.0.1 \
-Dhttp.proxyPort=7890 \
-Dhttps.proxyHost=127.0.0.1 \
-Dhttps.proxyPort=7890 \
-jar app.jar

2️⃣ 排除某些地址不走代理

-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 类(精细控制 ✅)

适合你只想让某一次请求走代理

1️⃣ HTTP 请求示例

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);
    }
}

四、Java 11+ HttpClient 设置代理 ✅(推荐)

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());
    }
}

五、SOCKS 代理(Socket / SSH 代理)

JVM 参数方式

-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 都可用)


六、第三方库代理设置

Apache HttpClient 5

HttpHost proxy = new HttpHost("127.0.0.1", 7890);
RequestConfig config = RequestConfig.custom()
        .setProxy(proxy)
        .build();

OkHttp

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

如果你愿意,可以告诉我:

  • ✅ Java 版本
  • ✅ HTTP / HTTPS / SOCKS
  • ✅ 是否用 Spring / OkHttp / Apache HttpClient

我可以给你完全贴合你项目的配置示例

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI