1.用以下方式提交时,不能传数组,只能传字符串。
function post_params($url,$params,$headers) { $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $json= curl_exec($ch); curl_close($ch); return $json; }
2.需要加设置,并将post值转成字符串。
function curlPost($url, $headers, $post){ $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); if(!empty($headers)){ curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); } curl_setopt($ch, CURLOPT_POST, 1);//POST curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($post));//postData curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //success curl_setopt($ch, CURLOPT_HEADER,0); curl_setopt($ch, CURLINFO_HEADER_OUT,1); $json = curl_exec($ch); return $json; }
3.http_build_query()把数组转为字符串传递原因。
在当CURLOPT_POSTFIELDS被设置为数组时,Content-type被设置成了multipart/form-data;
而用字符串传值时,Content-type为application/x-www-data-urlencoded。
传递一个数组到CURLOPT_POSTFIELDS,CURL会把数据编码成multipart/form-data,而传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded。
代码中添加的http_build_query()函数的作用是使用给出的关联(或下标)、数组生成一个经过URL-encode的请求字符串;
4.写法格式:http_build_query ( mixed $query_data [,string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )
举个例子:$data = array("name"=>"callback","value"=>"test");
$rescult = http_build_query($data);
输出下$rescutl可以得到:
name=callback&value=test
这个有什么用呢,这是模拟http请求的,把得到的数据data通过函数URL-encode,一般是用在回调。