温馨提示×

温馨提示×

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

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

java网络代理如何设置

发布时间:2026-10-03 15:29:58 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

在 Java 中设置网络代理有多种方式,主要取决于你使用的是 JVM 全局代理、HTTP 连接(HttpURLConnection)、还是 第三方库(如 Apache HttpClient、OkHttp)。下面按常见场景说明。


一、JVM 全局代理(最常用)

1. 通过启动参数设置(推荐)

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" \
     MyApp

说明:

  • http.proxyHost / http.proxyPort:HTTP 代理
  • https.proxyHost / https.proxyPort:HTTPS 代理
  • http.nonProxyHosts:不走代理的地址(用 | 分隔)

2. 在代码中设置(不推荐,但可用)

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 proxy = new Proxy(
        Proxy.Type.HTTP,
        new InetSocketAddress("127.0.0.1", 8080)
);

URL url = new URL("https://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);

conn.setRequestMethod("GET");
int code = conn.getResponseCode();

三、带认证的代理(用户名密码)

1. 全局代理认证

Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(
                "username",
                "password".toCharArray()
        );
    }
});

四、Apache HttpClient 设置代理

HttpClient 4.x

HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http");

RequestConfig config = RequestConfig.custom()
        .setProxy(proxy)
        .build();

CloseableHttpClient client = HttpClients.custom()
        .setDefaultRequestConfig(config)
        .build();

带认证

CredentialsProvider creds = new BasicCredentialsProvider();
creds.setCredentials(
        new AuthScope("127.0.0.1", 8080),
        new UsernamePasswordCredentials("user", "pass")
);

CloseableHttpClient client = HttpClients.custom()
        .setDefaultCredentialsProvider(creds)
        .build();

五、OkHttp 设置代理

Proxy proxy = new Proxy(
        Proxy.Type.HTTP,
        new InetSocketAddress("127.0.0.1", 8080)
);

OkHttpClient client = new OkHttpClient.Builder()
        .proxy(proxy)
        .build();

带认证

Authenticator proxyAuthenticator = (route, response) -> 
    response.request().newBuilder()
        .header("Proxy-Authorization",
                Credentials.basic("user", "pass"))
        .build();

OkHttpClient client = new OkHttpClient.Builder()
        .proxy(proxy)
        .proxyAuthenticator(proxyAuthenticator)
        .build();

六、SOCKS 代理

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

七、常见问题

  • ✅ 代理不生效:检查是否在连接前设置
  • ✅ HTTPS 代理失败:确认使用 https.proxyHost
  • ✅ 本地地址仍走代理:配置 nonProxyHosts

如果你能说明:

  • 使用哪种网络库(原生 / HttpClient / OkHttp)
  • 是否需要认证
  • HTTP 还是 SOCKS

我可以给你更精确的示例。

向AI问一下细节

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

AI
助
手