php curl常见错误:SSL错误、bool(false)


Posted in PHP onDecember 28, 2011

症状: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:'));

PHP and cURL: Disabling 100-continue header
Published June 15th, 2006
I've been using cURL (through PHP) to build a sort of proxy for a project I'm working on. I need to parse the returned headers (to recover the HTTP status), so had included a very simple script to do so. It had worked fine in the past, but for some reason barfed in this case. A closer look at what was being returned revealed that for some reason, Apache was prepending the ‘normal' headers with an extra response header:

HTTP/1.1 100 Continue

HTTP/1.1 200 OK Date: Fri, 09 Jun 2006 15:23:42 GMT
Server: Apache
...A bit of Googling revealed that this was to do with a header that cURL sends by default:

Expect: 100-continue

…which in turns tells Apache to send the extra header. I poked around a fair bit but couldn't quite find a workable solution short of manually removing the header in PHP, which seemed a bit clumsy. Finally, on a hunch I tried this:

curl_setopt( $curl_handle, CURLOPT_HTTPHEADER, array( 'Expect:' ) );

…which basically overrides the original ‘Expect:' header with an empty one.

Hope this helps someone.

PHP 相关文章推荐
PHP编程中八种常见的文件操作方式
Nov 19 PHP
使用PHP实现二分查找算法代码分享
Jun 24 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
功能强大的php分页函数
Jul 20 PHP
php操作access数据库的方法详解
Feb 22 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 #PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 #PHP
PHP写UltraEdit插件脚本实现方法
Dec 26 #PHP
url decode problem 解决方法
Dec 26 #PHP
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
Dec 25 #PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 #PHP
php操作JSON格式数据的实现代码
Dec 24 #PHP
You might like
Discuz 模板引擎的封装类代码
2008/07/18 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
ThinkPHP分页实例
2014/10/15 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
python中实现php的var_dump函数功能
2015/01/21 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
Python heapq使用详解及实例代码
2017/01/25 Python
Python读取properties配置文件操作示例
2018/03/29 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
Python正则表达式指南 推荐
2018/10/09 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
python利用google翻译方法实例(翻译字幕文件)
2020/09/21 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
超市业务员岗位职责
2013/12/05 职场文书
鸟的天堂导游词
2015/01/31 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书