做项目遇到file_get_contents获取HTTPS页面没有内容问题~
file_get_contents是一个不错的东西采集经常用,不过现在很多网站针对这个进行了预防处理,也就需要单独融入头了。而这时候最好的就是转移CURL的。而今天采集HTTPS页面,CURL也需要增加命令,其实就是针对HTTPS的证书问题的,这个很简单处理。其实主要就是下面2个选项:
CURLOPT_SSL_VERIFYPEER CURLOPT_SSL_VERIFYHOST
用来设置是否验证HTTPS证书的,我们做采集自然不需要啦。其实就是我们打开一些HTTPS网站时候,浏览器提示的您访问的网页证书不符之类的,然后你点击继续访问一个道理。下面封装了个方法,就简单用了。
function curlPost($url, $data=array(), $timeout = 30) { $ssl = substr($url, 0, 8) == "https://" ? TRUE : FALSE; $ch = curl_init(); $opt = array( CURLOPT_URL => $url, CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_POSTFIELDS => (array)$data, CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => $timeout, ); if ($ssl) { $opt[CURLOPT_SSL_VERIFYHOST] = 1; $opt[CURLOPT_SSL_VERIFYPEER] = FALSE; } curl_setopt_array($ch, $opt); $data = curl_exec($ch); curl_close($ch); return $data; }
方法很简单,使用也很简单:
$data = curlPost('https://www.baidu.com');
第一个参数地址,会自动识别是不是需要用证书,而第二个就是提交的参数。非常好用的哟。
----------
From https://www.cnblogs.com/lbnnbs/p/3920442.html 补充:
curl 请求https内容,返回空
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$api);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//禁止直接显示获取的内容 重要
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不验证证书下同
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //
$json = curl_exec($ch); //获取
curl_close($ch);