为什么curl说所有带http的网站都可用?

时间:2014-04-30 04:23:10

标签: php http curl

我正在使用cURL脚本来检查网站是否可用。

但它无法正常工作;根据它,所有具有http://的网址都可用。为什么这样做?

这是我的代码:

function isDomainAvailible($domain)
{
    //check, if a valid url is provided
    if(!filter_var($domain, FILTER_VALIDATE_URL))
    {
        return false;
    }

    //initialize curl
    $curlInit = curl_init($domain);
    curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($curlInit,CURLOPT_HEADER,true);
    curl_setopt($curlInit,CURLOPT_NOBODY,true);
    curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);

    //get answer
    $response = curl_exec($curlInit);

    curl_close($curlInit);

    if ($response) return true;

    return false;
    }

谢谢!

2 个答案:

答案 0 :(得分:1)

从代码来看,您似乎要么是在透明的Web代理之后,要么是由非标准名称服务器提供服务;

透明代理将代表您提出请求并返回其响应。如果是这种情况,似乎在不存在的位置的情况下,它仍将返回200状态代码。

非标准名称服务器可能会返回托管自定义目标网页的Web服务器的IP地址(考虑"域名出售")而不是返回查找错误。

您可以通过设置适当的选项请求cURL提供更多调试信息:

curl_setopt($ch, CURLOPT_VERBOSE, 1);

最后,检查返回的正文以查看返回的内容。从那里可以明显看出上述哪些场景适用于此。

答案 1 :(得分:0)

尝试curl_getinfo()获取curl exec信息

//get answer
$response = curl_exec($curlInit);
echo '<pre>';
print_r($response);
print_r(curl_getinfo($curlInit));
$info = curl_getinfo($curlInit);
if ($info['http_code'] == '200')
  return true;
else 
  retrun 'Curl error: ' . curl_error($curlInit);

也使用ssl verifypeer一些使用ssl

的网站
curl_setopt($curlInit, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curlInit, CURLOPT_SSL_VERIFYPEER, 0);

域名必须如下: - http://www.example.com(使用http://) 如果指定不带protocol://前缀的URL,curl将尝试猜测您可能需要的协议。然后它将默认为HTTP,但会尝试基于常用主机名前缀的其他协议。例如,对于以&#34; ftp。&#34;开头的主机名。 curl会假设你想说FTP。  阅读: - http://curl.haxx.se/docs/manpage.html

欲了解更多信息,请阅读手册: - http://www.php.net/manual/en/book.curl.php