加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

CURL CURLOPT_POSTFIELDS造成服务器无法识别name参数(unexpected parameter "name")的解决

(2014-08-21 20:44:34)
标签:

curl

php

curlopt_postfields

http_build_query

unexpectedparameter

PHP的CURL扩展,常用于模拟HTTP请求。
通常要POST数据时,
curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);
如果$post_data是数组的话,有时可能会出错,报个500或400之类的Code,unexpected parameter "name".
经过调试对比发现:
如果POST数据是数组,则HTTP头的Content-Type是multipart/form-data; boundary=—————————-f924413ea122,这是传文件时才会被使用的content type。想想刚刚报的那个错误,unexpected parameter "name",这个name应该就是传文件时的文件名。而且这种方式因为有分界符bounday等会增加多余的网络流量。
而将POST数据转成key=value&a=b这种形式(通过http_build_query),Content-Type变为application/x-www-form-urlencoded,这是传统表单提交的content type.

总结下,不需要上传文件的情况下,应对post提交的数据进行http_build_query,然后send出去,能实现更好的兼容性,更小的请求数据包。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有