CURL CURLOPT_POSTFIELDS造成服务器无法识别name参数(unexpected parameter "name")的解决
(2014-08-21 20:44:34)
标签:
curlphpcurlopt_postfieldshttp_build_queryunexpectedparameter |
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出去,能实现更好的兼容性,更小的请求数据包。
后一篇:Debian 修改时区/同步时间