【问题标题】:How will i know if my curl proxy is down?我如何知道我的 curl 代理是否已关闭?
【发布时间】:2011-10-21 13:06:11
【问题描述】:

在 PHP 中,我使用带有 curl 的代理:

CURLOPT_HTTPPROXYTUNNEL, 1,
CURLOPT_PROXY, ''.$current_proxy.'',

我有一个带有备份代理 ip 的数据库,但我想知道如何检测代理是否已关闭,以便它可以切换变量 $current_proxy。

您对检测服务器是否停机有什么建议?谢谢。

【问题讨论】:

  • 您不能简单地检查curl_exec() 是否返回FALSE 以及它是否尝试使用不同的代理?
  • @EdoDodo:在​​不存在的页面上尝试了所有代理(包括工作代理)之后,您可能会得出此方法不起作用的结论。

标签: php curl proxy


【解决方案1】:

您可以尝试使用fsockopen 像这样连接到代理:

$proxy = '98.255.255.255:8080';
$timeout = 5;
$splited = explode(':',$proxy); // Separate IP and port
if($con = @fsockopen($splited[0], $splited[1], $errorNumber, $errorMessage, $timeout)) 
{
    echo 'Connection successful, PROXY works!';
} else {
    echo $errorNumber . ' ' . $errorMessage;
}

【讨论】:

  • 我在执行此脚本时遇到了问题。在“@fsockopen”上 - 整个主机都无法访问。
【解决方案2】:

list.txt 包含如:

1.2.3.4:2487 123.123.123.123:3248

等等。这样的php代码...

$url = "http://www.google.com";
$proxies = file("list.txt");

foreach($proxies as $proxy)
{
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_PROXY,$proxy);
    curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,$proxy);
    $page = curl_exec($ch);
    curl_close($ch);
    $check = stripos($page,'</html>'); // not pretty :)

        if($check > 0)
        {
            echo $proxy . " Works!";
        }else{
            echo $proxy . " Is Dead!";
        }
}

【讨论】:

    【解决方案3】:

    Curl 不区分代理已关闭或页面不存在(或此页面所在的服务器已关闭)。这就是为什么您需要自己发明解决方法。至少来自 Haxx AB 的 Daniel said it。

    【讨论】:

      猜你喜欢
      • 2012-03-07
      • 2018-03-07
      • 2014-03-03
      • 2019-03-21
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      相关资源
      最近更新 更多