PHP POST请求 字符串和数组传值的区别

Posted Evengod

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP POST请求 字符串和数组传值的区别相关的知识,希望对你有一定的参考价值。

  最近工作中需要请求一个API,由于之前接过类似的就直接拿来写好的函数使用。但数据死活就是传不过去,一只返回err.

代码如下:

技术分享图片
 1 function post_params($url, $params,$headers) {  
 2          $ch = curl_init();  
 3          curl_setopt($ch, CURLOPT_POST, 1);  
 4          curl_setopt($ch, CURLOPT_URL, $url);  
 5          curl_setopt($ch, CURLOPT_POSTFIELDS, $params);  
 6          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 7          curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 8          $json= curl_exec($ch);
 9          curl_close($ch);
10          return $json;  
11  }
View Code

看起来没什么问题,但就是不行。

到网上看了类似的解决方案后,抱着试一试的心态修改了代码:

技术分享图片
 1 function curlPost($url, $headers, $post){
 2     $ch = curl_init();
 3     curl_setopt($ch,CURLOPT_URL,$url);
 4     if(!empty($headers)){
 5         curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
 6     }
 7     curl_setopt($ch, CURLOPT_POST, 1);//POST
 8     curl_setopt($ch, CURLOPT_POSTFIELDS, 
 9         http_build_query($post));//postData
10     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //success
11     curl_setopt($ch, CURLOPT_HEADER,0);
12     curl_setopt($ch, CURLINFO_HEADER_OUT,1);
13     $json = curl_exec($ch);
14     return $json;
15 }
View Code

然后重新请求,OK了...
啥情况呢?

我的理解是:在当CURLOPT_POSTFIELDS被设置为数组时,Content-type 被设置成了multipart/form-data;

而用字符串传值时,Content-type为application/x-www-data-urlencoded。

代码中添加的http_build_query()函数的作用是使用给出的关联(或下标)、数组生成一个经过URL-encode的请求字符串;

写法格式: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,一般是用在回调。(完)

结论:API接收的是字符串!http_build_query()把数组转为字符串传递。

相关链接:https://blog.csdn.net/u011250882/article/details/48983929

(完)

码代码 还是要静下心来思考 心无旁骛 对的逻辑很关键... 


以上是关于PHP POST请求 字符串和数组传值的区别的主要内容,如果未能解决你的问题,请参考以下文章

请详细解说下php关于post传值和get传值的内容,区别,安全性,大小等。

post和get传值的区别

JQuery中的get和post怎么得到后台返回的值的

From表单中的传值有那几种方法?

php post方法传值 接收不到

ajax中的put请求和post请求传data值的区别