php curl访问https 域名接口一直报错的问题
这两天一直在对接一个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:'));