由于SSL,无法检查网站是上升还是下降

时间:2014-12-15 22:03:51

标签: php http url ssl curl

所以我尝试检查一个网站是否因卷曲而上升或下降。所以这是我的逻辑

  • 剥离协议的URL和其他任何内容,只留下主机。 example.com
  • http协议添加到网址,然后按照curl
  • 进行重定向

所以这里有一些代码

if(isset($_GET['url'])){
    $domain = $_GET['url'];

    //Clean up domain
    $input = trim($domain, '/');

    // If scheme not included, prepend it
    if (!preg_match('#^http(s)?://#', $input)) {
        $input = 'http://' . $input;
    }

    $urlParts = parse_url($input);

    // remove www
    $domain = preg_replace('/^www\./', '', $urlParts['host']);

    function addhttp($domain) {
        if (!preg_match("~^(?:f|ht)tps?://~i", $domain)) {
            $domain = "http://" . $domain;
        }
        return $domain;
    }
    $domain = addhttp($domain);

    date_default_timezone_set('America/New_York');
    $date = date('m/d/Y h:i:s a', time());

}

我的功能是检查网站是上升还是下降

function isDomainAvailible($domain){
    if(!filter_var($domain, FILTER_VALIDATE_URL)){
        return false;
    }

    $curlInit = curl_init($domain);
    curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curlInit,CURLOPT_HEADER,true);
    curl_setopt($curlInit,CURLOPT_NOBODY,true);
    curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curlInit, CURLOPT_FOLLOWLOCATION, true);

    $response = curl_exec($curlInit);

    curl_close($curlInit);

    if($response)return true;

    return false;
}

现在的问题是,当我做一个拥有SSL的网站,因此有一个重定向时,我似乎总是得到该网站,即使它已经关闭。有任何想法吗?我的逻辑是否朝着正确的方向发展?

2 个答案:

答案 0 :(得分:1)

function isDomainAvailible($domain){
    if(!filter_var($domain, FILTER_VALIDATE_URL)){
        return false;
    }

    $curlInit = curl_init($domain);
    curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curlInit,CURLOPT_HEADER,true);
    curl_setopt($curlInit,CURLOPT_NOBODY,true);
    curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curlInit, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curlInit, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curlInit, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curlInit,CURLOPT_FAILONERROR,true);

    $m=true;
    if(curl_exec($curlInit) === false){ $m=false; echo "Error: ".curl_error($curlInit);}
    curl_close($curlInit);


    return $m;
}

答案 1 :(得分:0)

您将CURLOPT_FOLLOWLOCATION设置为TRUE

该选项的名称暗示:跟随站点发送的重定向标头。您需要删除此选项(或明确将其设置为FALSE)至"验证"实际的网址。

在旁注中:无论是否存在指向具有相同IP地址的域名的实际DNS www.记录,您都将剥离域名的A部分。在执行此操作时,您可能会从其他计算机获得答案。