隧道代理ip使用

丿似锦發表於2024-08-25

簡介

隧道代理(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());
    }
}

結束

相關文章