简介
隧道代理(Tunnel Proxy
)是一种特殊的代理服务,它的工作方式是在客户端与远程服务器之间建立一条“隧道”。这种技术常被用来绕过网络限制或提高网络安全性。
主要功能
- IP地址变换:隧道代理能够改变客户端的IP地址,使得客户端访问的目标服务器看到的是代理服务器的IP地址,而不是客户端的真实IP地址。
- 数据加密传输:某些隧道代理服务会提供加密功能,确保数据在客户端与远程服务器之间的安全传输。
- 动态IP池管理:隧道代理通常由云服务提供支持,具有动态分配IP地址的能力,这意味着可以频繁更换IP以避免被目标服务器封锁。
- 简化开发流程:对于开发者来说,使用隧道代理可以减少管理IP池的复杂度,从而降低开发成本。
使用
注册隧道代理服务
https://www.kuaidaili.com/?ref=nes3yyyaelhd
互联网上有许多代理服务商,这个以其中一个举例
选择对应方式
按个人所需购买不同方式,若仅为短时非高频使用,建议购买按量付费模式。
代码实现
这里以
java
语言为例
jsoup
import java.io.IOException;
import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;public class TestProxyJsoup {// 用户名密码, 若已添加白名单则不需要添加final static String ProxyUser = "t****";final static String ProxyPass = "*****";// 隧道域名、端口号final static String ProxyHost = "***.***.com";final static Integer ProxyPort = '****';public static String getUrlProxyContent(String url) {Authenticator.setDefault(new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(ProxyUser, ProxyPass.toCharArray());}});Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ProxyHost, ProxyPort));try {// 此处自己处理异常、其他参数等Document doc = Jsoup.connect(url).followRedirects(false).timeout(3000).proxy(proxy).get();if (doc != null) {System.out.println(doc.body().html());}} catch (IOException e) {e.printStackTrace();}return null;}public static void main(String[] args) throws Exception {// 目标网站String targetUrl = "https://***.***.com/****";// JDK 8u111版本后,目标页面为HTTPS协议,启用proxy用户密码鉴权System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");getUrlProxyContent(targetUrl);}
}
hutool
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpRequest;// 代理验证信息
class ProxyAuthenticator extends Authenticator {private String user, password;public ProxyAuthenticator(String user, String password) {this.user = user;this.password = password;}protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(user, password.toCharArray());}
}public class TestProxyHutool {// 用户名密码, 若已添加白名单则不需要添加final static String ProxyUser = "t****";final static String ProxyPass = "*****";// 隧道域名、端口号final static String ProxyHost = "***.***.com";final static Integer ProxyPort = '*****';public static void main(String[] args) {// 目标网站String url = "https://***.***.com/***";// JDK 8u111版本后,目标页面为HTTPS协议,启用proxy用户密码鉴权System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");// 设置请求验证信息Authenticator.setDefault(new ProxyAuthenticator(ProxyUser, ProxyPass));// 发送请求HttpResponse result = HttpRequest.get(url).setHttpProxy(ProxyHost, ProxyPort).timeout(20000)//设置超时,毫秒.execute();System.out.println(result.body());}
}
结束