问答一下,轻松解决,电脑应用解决专家!
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win10/Win11
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascriptLinux系统
PHP教程CSS教程XML教程

PHP实现POST请求字符串和数组传值的,POST传数组

更新时间:2021-12-25 21:21 作者:佚名点击:

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,一般是用在回调。

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

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容