轉自黎明互聯:PHP使用curl請求https站點的常見錯誤及解決方案.
使用curl請求http站點和https站點最大的不同就是https站點有證書驗證這一環節,如果證書驗證不通過則無法發起請求,不管是請求什麼類型的站點遇到問題時先把錯誤碼打印出來看一下,打印錯誤碼的代碼片段如下:
$error = curl_errno($ch); //其中$ch爲curl_init();返回的句柄
print_r($error);
然後根據錯誤碼找出錯誤,錯誤碼對照表可參考:CURL錯誤碼錶.
證書無法驗證的錯誤碼是60,peer 證書無法被已知的CA 證書驗證,驗證需要本地證書支持,本地證書路徑有時在php.ini中沒有被設置或者設置錯誤就會出現這個問題,當然最好在不改變系統配置的情況下能使用代碼解決那也是一種方案,這樣代碼的移植性非常好。通過代碼解決的方案有兩個:1.禁止驗證 2.設置本地證書。下面是代碼片段:
//解決方案一 禁用證書驗證
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
//解決方案二 設置證書
curl_setopt($ch,CURLOPT_CAINFO,'證書路徑/證書文件'); //證書路徑需要正確
證書文件可以點此下載,也可以在https://curl.haxx.se/docs/caextract.html下載