在PHP中如何檢測(cè)SOCKS5代理狀態(tài)

PHP
小樊
92
2024-08-29 12:00:18

要在 PHP 中檢測(cè) SOCKS5 代理的狀態(tài),可以使用 cURL 庫(kù)

<?php
function check_socks5_proxy($proxy_host, $proxy_port) {
    $url = "http://www.example.com"; // 用于測(cè)試代理的目標(biāo) URL
    $ch = curl_init($url);

    // 設(shè)置 cURL 選項(xiàng)
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
    curl_setopt($ch, CURLOPT_PROXY, $proxy_host . ':' . $proxy_port);
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    // 發(fā)送請(qǐng)求并獲取響應(yīng)
    $response = curl_exec($ch);

    // 檢查是否有錯(cuò)誤
    if (curl_errno($ch)) {
        echo "Error: " . curl_error($ch);
        return false;
    }

    // 關(guān)閉 cURL 會(huì)話
    curl_close($ch);

    // 檢查響應(yīng)是否包含目標(biāo) URL 的內(nèi)容(表示代理有效)
    if (strpos($response, "Example Domain") !== false) {
        return true;
    } else {
        return false;
    }
}

// 使用示例
$proxy_host = "127.0.0.1";
$proxy_port = 1080;

if (check_socks5_proxy($proxy_host, $proxy_port)) {
    echo "SOCKS5 proxy is working.";
} else {
    echo "SOCKS5 proxy is not working.";
}
?>

這個(gè)函數(shù)首先初始化一個(gè) cURL 會(huì)話,然后設(shè)置代理服務(wù)器的相關(guān)選項(xiàng)。接著,它發(fā)送一個(gè) HTTP 請(qǐng)求并等待響應(yīng)。如果響應(yīng)中包含目標(biāo) URL 的內(nèi)容,那么說(shuō)明代理有效。如果有任何錯(cuò)誤或響應(yīng)不符合預(yù)期,則認(rèn)為代理無(wú)效。

請(qǐng)注意,這個(gè)示例需要安裝并啟用 PHP 的 cURL 擴(kuò)展。

0