PHP curl https访问问题
2016-03-25 12:00
531 查看
PHPcurlhttps访问问题,原代码:
https访问错误,加入了cURL查看错误方法curl_error()
返回的错误信息为:
SSLcertificateproblem,verifythattheCAcertisOK
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /*@StringurlURL地址 *@ArraydataPOST数据 *@ResourcecurlcURL对象 *@returninfo返回信息 */ $curl =curl_init(); //启动一个cURL会话 curl_setopt( $curl ,CURLOPT_URL, $url ); //要访问的地址 curl_setopt( $curl ,CURLOPT_HEADER,0); //返回header部分 curl_setopt( $curl ,CURLOPT_HTTPHEADER, array ( "Content-Type:application/xml" )); curl_setopt( $curl ,CURLOPT_RETURNTRANSFER,1); //返回字符串,而非直接输出 curl_setopt( $curl ,CURLOPT_USERAGENT, $_SERVER [ 'HTTP_USER_AGENT' ]); //模拟用户使用的浏览器 curl_setopt( $curl ,CURLOPT_POST,1); //发送一个常规的Post请求 curl_setopt( $curl ,CURLOPT_POSTFIELDS, $data ); //Post提交的数据包 curl_setopt( $curl ,CURLOPT_TIMEOUT,30); //设置超时限制防止死循环 $info =curl_exec( $curl ); //执行操作并返回数据 curl_close( $curl ); //关闭cURL会话 |
1 2 | $error =curl_error( $curl ); //需放在curl_close($curl)执行之前 var_dump( $error ); |
SSLcertificateproblem,verifythattheCAcertisOK
HTTPS协议服务器进行SSL验证的问题
解决方法有多种,可以将HTTPS改为使用HTTP协议(可行的情况下),也可以通过cURL选项设置为禁止验证(推荐):
1 2 | curl_setopt( $curl ,CURLOPT_SSL_VERIFYHOST,0); curl_setopt( $curl ,CURLOPT_SSL_VERIFYPEER,FALSE); |
CURLOPT_SSL_VERIFYPEER | 禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用 CURLOPT_CAPATH选项设置证书目录如果 CURLOPT_SSL_VERIFYPEER(默认值为2)被启用, CURLOPT_SSL_VERIFYHOST需要被设置成 TRUE否则设置为 FALSE。 |
CURLOPT_SSL_VERIFYHOST | 1检查服务器SSL证书中是否存在一个公用名(commonname)。译者注:公用名(CommonName)一般来讲就是填写你将要申请SSL证书的域名(domain)或子域名(subdomain)。2检查公用名是否存在,并且是否与提供的主机名匹配。 |
注意按手册规定:
CURLOPT_SSL_VERIFYPEER属于应该被赋予一个bool类型值的选项;
CURLOPT_SSL_VERIFYHOST属于应该被赋予一个integer的选项。
更改之后问题就解决了。
值得一提的是,当cURL出现错误和问题时,curl_exec()将返回FALSE,可以使用上面提到的curl_error()方法输出错误原因。此方法必须在curl_close()之前使用。
相关文章推荐
- 计算机网络中的TCP/UDP协议到底是怎么回事(二)
- 计算机网络中的TCP/UDP协议到底是怎么回事(一)
- IOS开发之网络开发工具
- XMLHttpRequestUtil
- 网络图片人脸识别并根据人脸焦点显示图片
- 网络并发服务器设计
- Android 网络通信(Asynctask类的使用)
- 微博 https 请求协议
- javaweb学习总结(四)——Http协议
- 17.Studio中导入HttpClient的jar包
- redhat7 网络安装 Kickstart
- java模拟HTTP post,get请求
- 网络防火墙系统的实现(三)
- 神经网络翻译系统dl4mt源码之Numpy库相关函数的使用(一)
- get与post的区别
- 网络扫描(二)
- HTTP in iOS你看我就够
- android 中HttpClient和URLConnection的区别
- 扒一扒HTTPS网站的内幕
- 原生代码加载网络图片和Volley和Picasso的简单介绍和优缺点对比