概述
查看日志发现,偶尔有的用户注册失败,这个频率非常低,低到顶多一个月一次发现这种现象。
自己反复测试会员注册流程,没有任何问题,也就不了了之了。
但有一天某个会员非常执着,留下了很多(几十个)注册失败日志。
这使我断定,肯定不是网络异常之类的。
我仔细记录他的提交数据,完全复制一份由我这边再提交,果然。。。失败。
失败原因是 这个人的密码是@开头的。
curl传送post数据的时候如果第一个字符串为"@",则会被当做上传文件来处理。
如下:
$data = array('file1'=>'@filepath','file2'=>'@filepath');
curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
那如果需要传递@开头的字符串呢?
如果php版本是5.5以上,可以用CURLOPT_SAFE_UPLOAD选项解决这个问题。
如果低于5.5呢?
curl的post数据可以是数组形式,也可以是字符串形式,
如下:
// 数组形式
$data = array('key1'=>'@abc','key2'=>'@efg');
curl_setopt($curl, CURLOPT_POSTFIELDS,$data); // 失败
//拼接成一个字符串
$data = array('key1'=>'@abc','key2'=>'@efg');
$data_string = http_build_query($data);
curl_setopt($curl, CURLOPT_POSTFIELDS,$data_string); // 正常
所以如果提交的数据里没有文件,那可以使用拼接方式避免这个问题。
最后
以上就是外向斑马为你收集整理的curl post 日志_Curl 发送@开头的字符串问题的全部内容,希望文章能够帮你解决curl post 日志_Curl 发送@开头的字符串问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复