基于java.net包(简单的 HTTP 请求检测)用Java语言方法来检测代理IP是否有效:
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
public class ProxyChecker {
public static boolean checkProxy(String proxy) {
try {
String[] parts = proxy.split(":");
String ip = parts[0];
int port = Integer.parseInt(parts[1]);
Proxy proxyObj = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ip, port));
URL url = new URL("https://www.example.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxyObj);
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode == 200) {
return true;
} else {
return false;
}
} catch (IOException | NumberFormatException e) {
return false;
}
}
代码解析:在checkProxy方法中,首先从代理IP字符串中拆分出IP地址和端口号。
创建一个Proxy对象,指定代理类型为HTTP和代理服务器的地址。
然后尝试使用代理打开一个URL连接,这里是https://www.example.com,并设置连接超时和读取超时时间为5秒。
获取响应码,如果是200则表示代理有效,返回true;否则,捕获IOException(网络相关异常)和NumberFormatException(端口号转换异常)并返回false。
第二个示例:基于java.net.Socket(底层的TCP连接检测)
import java.io.IOException;
import java.net.Socket;
public class ProxySocketChecker {
public static boolean checkProxySocket(String proxy) {
try {
String[] parts = proxy.split(":");
String ip = parts[0];
int port = Integer.parseInt(parts[1]);
Socket socket = new Socket();
socket.connect(new java.net.InetSocketAddress(ip, port), 5000);
socket.close();
return true;
} catch (IOException | NumberFormatException e) {
return false;
}
}
}
代码解释:在checkProxySocket方法中,同样先拆分代理IP字符串得到IP和端口号。
创建一个Socket对象,尝试连接代理服务器,设置超时时间为5秒。
如果连接成功,关闭Socket并返回true;否则,捕获异常并返回false。
这些方法只是基本的检测方式,实际应用中可以根据具体需求(如检测代理是否支持特定协议、是否能够隐藏真实IP等)进行更复杂的检测。同时,在进行大量代理IP检测时,要注意遵守网站的使用规则,避免过度频繁的请求导致被封禁。
仅供参考,感谢审核大大,欢迎交流!