我在php中有一个基于curl的函数来检查一个网站是否在线工作正常但是我注意到它只适用于http链接而不是https链接。
是否有人知道如何更新此功能以支持https链接。
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;
} else {
return false;
}
}
答案 0 :(得分:1)
如果您想使用您的功能,那么您需要https支持。您可以下载此文件cacert.pem并在函数中添加路径,如:
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);
curl_setopt($curlInit, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);
curl_setopt($curlInit, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);
curl_setopt ($curlInit, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
// Get answer
$response = curl_exec($curlInit);
curl_close($curlInit);
if ($response){
return 1;
} else {
return 0;
}
}
$domain = 'https://www.facebook.com';
$avi = isDomainAvailible($domain);
echo $avi;
答案 1 :(得分:1)
尝试在curl函数中添加它
curl_setopt($curlInit, CURLOPT_SSL_VERIFYPEER, false);
答案 2 :(得分:1)
当你说,"我注意到它只适用于http链接而不是https链接",你的意思是什么? cURL以相同的方式工作,您只需使用https协议而不是http传递URL。问题可能是其他问题。这听起来像你遇到的麻烦吗? How to send HTTPS posts using php