在Java中,可以使用多种方法实现网络代理。这里,我将向您展示如何使用Java的原生java.net.Proxy
类和第三方库ProxySelector
来实现网络代理。
方法1:使用java.net.Proxy类
import java.io.IOException;
import java.net.*;
public class ProxyExample {
public static void main(String[] args) {
// 设置代理服务器的主机名和端口
String proxyHost = "proxy.example.com";
int proxyPort = 8080;
// 创建一个代理对象
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
// 创建一个URL对象,指定目标URL
URL url = new URL("http://www.example.com");
// 使用代理对象创建一个URLConnection
URLConnection connection = url.openConnection(proxy);
// 设置请求属性(可选)
connection.setRequestProperty("User-Agent", "Mozilla/5.0");
// 读取目标URL的内容
try (InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
方法2:使用ProxySelector类
首先,您需要添加java.net.ProxySelector
的依赖。如果您使用Maven,可以在pom.xml
文件中添加以下依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-net</artifactId>
<version>3.8.0</version>
</dependency>
然后,您可以使用以下代码实现网络代理:
import java.io.IOException;
import java.net.*;
import java.util.List;
public class ProxySelectorExample {
public static void main(String[] args) {
// 设置代理服务器的主机名和端口
String proxyHost = "proxy.example.com";
int proxyPort = 8080;
// 创建一个ProxySelector对象
ProxySelector proxySelector = new ProxySelector() {
@Override
public List<Proxy> select(URI uri) {
return List.of(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)));
}
};
// 创建一个URL对象,指定目标URL
URL url = new URL("http://www.example.com");
// 使用ProxySelector选择代理
List<Proxy> proxies = proxySelector.select(url.toURI());
// 遍历代理列表并尝试连接
for (Proxy proxy : proxies) {
try {
// 使用代理对象创建一个URLConnection
URLConnection connection = url.openConnection(proxy);
// 设置请求属性(可选)
connection.setRequestProperty("User-Agent", "Mozilla/5.0");
// 读取目标URL的内容
try (InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
break; // 连接成功,退出循环
} catch (IOException e) {
System.err.println("Failed to connect through proxy: " + proxy);
}
}
}
}
以上代码展示了如何使用Java的java.net.Proxy
类和ProxySelector
类实现网络代理。您可以根据自己的需求选择合适的方法。