我正在使用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;
}
谢谢!
答案 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