在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
類實現網絡代理。您可以根據自己的需求選擇合適的方法。