在 Java 开发中,如果你要为 HTTP 请求配置 代理服务器(如使用代理 IP、端口、用户名密码等),可以根据你使用的 HTTP 客户端不同方式也不同。以下是几种常见场景:
✅ 1. 使用原生 HttpURLConnection
import java.io.InputStream;
import java.net.*;
public class ProxyExample {
public static void main(String[] args) throws Exception {
// 创建代理对象(HTTP 类型)
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("代理IP", 端口号));
// 设置请求地址
URL url = new URL("http://www.example.com");
// 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
// 可选:设置请求头等
conn.setRequestMethod("GET");
// 读取响应
InputStream inputStream = conn.getInputStream();
// 处理 inputStream...
}
}
如:
new InetSocketAddress("127.0.0.1", 8888);
✅ 2. 使用 Apache HttpClient(常用于企业开发)
示例(HttpClient 4.x):
import org.apache.http.HttpHost;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.DefaultProxyRoutePlanner;
public class ApacheProxyExample {
public static void main(String[] args) throws Exception {
// 创建代理主机
HttpHost proxy = new HttpHost("代理IP", 端口号);
// 设置代理路由
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
// 创建 HttpClient 并设置代理
CloseableHttpClient httpClient = HttpClients.custom()
.setRoutePlanner(routePlanner)
.build();
// 发起请求
HttpGet request = new HttpGet("http://www.example.com");
CloseableHttpResponse response = httpClient.execute(request);
// 处理响应
System.out.println("响应状态码:" + response.getStatusLine().getStatusCode());
}
}
如果代理需要认证,还需要使用
CredentialsProvider
设置用户名和密码,示例我可以补充。
✅ 3. 使用 OkHttp(现代 Java 常用库)
import okhttp3.*;
import java.net.InetSocketAddress;
import java.net.Proxy;
public class OkHttpProxyExample {
public static void main(String[] args) throws Exception {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("代理IP", 端口号));
OkHttpClient client = new OkHttpClient.Builder()
.proxy(proxy)
.build();
Request request = new Request.Builder()
.url("http://www.example.com")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
}
}
✅ 4. 全局设置(JVM 级别代理)
你还可以通过 JVM 参数为所有请求设置全局代理:
-Dhttp.proxyHost=代理IP -Dhttp.proxyPort=端口号
-Dhttps.proxyHost=代理IP -Dhttps.proxyPort=端口号
也可以在代码中设置:
System.setProperty("http.proxyHost", "代理IP");
System.setProperty("http.proxyPort", "端口号");
⛔ 注意事项:
HTTPS 请求用
https.proxyHost
,HTTP 用http.proxyHost
某些情况下,代理服务器还需要用户名密码(可单独补充示例)
如果代理需要跳过某些域名,可设置
http.nonProxyHosts