《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.snjht.com/jiaocheng/1855.html