PHP curl https访问问题,原代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* @String url URL地址
 * @Array data POST数据
 * @Resource curl cURL对象
 * @return info 返回信息
 */
 $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会话

https访问错误,加入了cURL查看错误方法curl_error()

1
2
$error = curl_error ($curl);//需放在curl_close($curl)执行之前
var_dump($error);

返回的错误信息为:

SSL certificate problem, verify that the CA cert is OK

HTTPS协议服务器进行SSL验证的问题

解决方法有多种,可以将HTTPS改为使用HTTP协议(可行的情况下),也可以通过cURL选项设置为禁止验证(推荐):

1
2
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

参看PHP手册中关于cURL选项的描述:PHP: curl_setopt

CURLOPT_SSL_VERIFYPEER 禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE
CURLOPT_SSL_VERIFYHOST 1 检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。2 检查公用名是否存在,并且是否与提供的主机名匹配。

注意按手册规定:

CURLOPT_SSL_VERIFYPEER属于应该被赋予一个bool类型值的选项;

CURLOPT_SSL_VERIFYHOST属于应该被赋予一个integer的选项。

更改之后问题就解决了。

值得一提的是,当cURL出现错误和问题时,curl_exec()将返回FALSE,可以使用上面提到的curl_error()方法输出错误原因。此方法必须在curl_close()之前使用。

最新文章

  1. 关于 JSONP跨域示例
  2. 活用scanf
  3. [LeetCode]题解(python):050-Pow(x, n)
  4. Java基础——序列化
  5. linux c first
  6. Anchor和Dock的区别
  7. hdu 4657 Find Permutation
  8. QtSQL学习笔记(2)- 连接到数据库
  9. 使用 EPUB 制作数字图书
  10. [转] 怎样快速而优雅地遍历 JavaScript 数组
  11. Perl 多线程模块 Parallel::ForkManager
  12. 201521123004 《Java程序设计》第10周学习总结
  13. iframe自适应高度???
  14. Python调用ansible API系列(三)带有callback的执行adhoc和playbook
  15. poj1236 SCC+缩点
  16. BMC ipmitool 对linux服务器进行IPMI管理
  17. RegExp 对象
  18. NPOI 自定义单元格背景颜色 XSSFWorkbook - Excel
  19. (转)Spring & SpringMVC学习
  20. Rabbitmq基本使用 SpringBoot整合Rabbit SpringCloud Stream+Rabbit

热门文章

  1. Tigase集群设置
  2. Pydev Debugger not working with breakpoints
  3. JAVA中的输入方法
  4. Yii2.0学习笔记:第一个页面Saying Hello
  5. Fiddler (五) Mac下使用Fiddler
  6. Java继承的初始化
  7. java RSA加解密以及用途
  8. java集合-HashMap
  9. 如何使用 HTML5 Canvas 制作水波纹效果
  10. 【追寻javascript高手之路02】变量、作用域知多少?