php使用curl获取https内容报错解决方案

php curl库 获取https url内容时候,默认是检查根证书的。如果php环境没有配置本地根证书的话,执行会有报错的。


例如:

$url = 'https://img.alicdn.com/tps/i2/TB1bNE7LFXXXXaOXFXXwFSA1XXX-292-116.png_145x145.jpg';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
$output = curl_exec($ch);
echo curl_error($ch);

 

执行后$output为false,报错内容为:SSL certificate problem: unable to get local issuer certificate.

解决方案有两种:

一.关闭本地证书验证.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);

//是否合法的证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

//证书与域名是否匹配
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($ch);

二.在php环境中配置CA 根证书。
1.下载根证书:ca-bundle.crt

2.php.ini 里面添加:
[curl]
curl.cainfo = C:\Users\silk\Downloads\ca-bundle.crt

结论:

生产环境还是建议使用第二种方式,防止http内容劫持。

作者: 白金马桶

天道酬勤...

发表评论