PHP curl https访问问题
2024-10-18 22:33:29
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()之前使用。
最新文章
- 关于 JSONP跨域示例
- 活用scanf
- [LeetCode]题解(python):050-Pow(x, n)
- Java基础——序列化
- linux c first
- Anchor和Dock的区别
- hdu 4657 Find Permutation
- QtSQL学习笔记(2)- 连接到数据库
- 使用 EPUB 制作数字图书
- [转] 怎样快速而优雅地遍历 JavaScript 数组
- Perl 多线程模块 Parallel::ForkManager
- 201521123004 《Java程序设计》第10周学习总结
- iframe自适应高度???
- Python调用ansible API系列(三)带有callback的执行adhoc和playbook
- poj1236 SCC+缩点
- BMC ipmitool 对linux服务器进行IPMI管理
- RegExp 对象
- NPOI 自定义单元格背景颜色 XSSFWorkbook - Excel
- (转)Spring &; SpringMVC学习
- Rabbitmq基本使用 SpringBoot整合Rabbit SpringCloud Stream+Rabbit