《PHP使用curl采集或抓取网页时出现certificate problem: unable to get local issuer certificate错误》要点:
本文介绍了PHP使用curl采集或抓取网页时出现certificate problem: unable to get local issuer certificate错误,希望对您有用。如果有疑问,可以联系我们。
在PHP使用CURL抓取网页时,出现
certificate problem: unable to get local issuer certificate
错误,这是因为被抓取的网页是HTTS。需要SSL认证。
有三种解决方案:
方案1:绕开验证:
添加curl选项如下设置即可:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
方案2:有服务器操作权限的,则在服务端的PHP中下载cacert.pem,并添加到PHP.INI中。
如下载放到 D:/php7/extras/ssl/cacert.pem
然后配置php.ini如下(curl扩展是必须开启的):
curl.cainfo = D:/php7/extras/ssl/cacert.pem
重启web服务器。
下载地址:
https://curl.haxx.se/ca/cacert.pem
这样就可以所有网站通用,不必再在PHP代码中配置curl了。
注意,也有人下载这个:
https://github.com/bagder/ca-bundle/tree/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09
上面的ca-bundle.crt,然后配置
curl.cainfo="真实路径/ca-bundle.crt"
方案3:没有服务器权限的,一般虚拟主机的方案:
把上面的cacert.pem下载放到自己的网站目录下,比如: 网站根目录下ext/cacert.pem
然后在PHP中指定该文件即可:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); #curl_setopt($ch,CURLOPT_CAINFO, WEB_ROOT.'ext/cacert.pem'); //根据http://curl.haxx.se/ca/cacert.pem 下载的证书,请使用绝对路径
另外需要注意的是:
1、PHP7如果开启了OPENSSL,则不需要以上配置,7以下以及WINDOW主机需要,所以需要测试一下你的主机是否需要以上配置。
2、开启了cainfo配置后,在WINDOW主机上,可能会导致采集或抓取网页变慢。这个实测过。因此如果你有出现这个现象,那么推荐在程序中判断。即方案3.
转载请注明本页网址:
http://www.vephp.com/jiaocheng/1855.html