這兩天一直在對接一個https的接口
通過本地postman完美鏈接后再服務器一直報錯
出現問題:linux 下 curl可以正常訪問 但是PHP請求一直返回false
測試方法:var_dump(curl_error($ch)); <在close之前>
返回:“SSL: certificate subject name 'xxx' does not match target host name 'www.miniscores.cn'”
這說明ssl證書有問題,如果對方沒有給定證書。就忽略吧。
解決辦法:
1、忽略證書(兩個都要加上!否則並不能忽略):
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
2、自然是讓對方提供證書啦
另轉大神(TAOisMESS)的其他問題解決方案:
在命令行中使用curl調用跳過SSL證書檢查的方法,需要的朋友可以參考下。
症狀:php curl調用https出錯
排查方法:在命令行中使用curl調用試試。
原因:服務器所在機房無法驗證SSL證書。
解決辦法:跳過SSL證書檢查。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
症狀:php curl調用curl_exec返回bool(false),命令行curl調用正常。
排查方法:
var_dump(curl_error($ch));
返回:
string(23) "Empty reply from server"
再排查:
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
返回:
HTTP/1.1 100 Continue
Connection: close
原因:php curl接收到HTTP 100就結束了,應該繼續接收HTTP 200
解決方案:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));