验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Java网络代理怎么设置

阅读:514 来源:乙速云 作者:代码code

Java网络代理怎么设置

在 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

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

分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>