PHP-http_build_query 的一个问题

PHP-http_build_query 的一个问题

虐人心 发布于 2017-10-30 字数 474 浏览 1330 回复 2

当我们使用CURL来post数据的时候,需要设置post的数据
curl_setopt($c, CURLOPT_POSTFIELDS, $post_data);

假如这里的$data是

$data = array(
'name'=>'scofield',
'time'=>'2012-2-3'
)
接下来,需要先将$data变成字符串
$post_data = http_build_query($data);
而采用 http_build_query 转换后再
curl_setopt($c, CURLOPT_POSTFIELDS, $post_data);

看起来没有什么问题。但在实际操作中,$post_data 并没有被post过去。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

想挽留 2017-11-10 2 楼

curl_setopt($c, CURLOPT_POSTFIELDS, $post_data);

假如这里的$data是

$data = array(
'username'=>'lamp',
'user_id'=>123456
)
接下来,需要先将$data变成字符串
$post_data = http_build_query($data);
而采用 http_build_query 转换后再
curl_setopt($c, CURLOPT_POSTFIELDS, $post_data);

看起来没有什么问题。但在实际操作中,$post_data 并没有完全被post过去,user_id丢失了。

解决方法:http_build_query($data,"","&");

附:curl post示例:

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$query_url);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$data = trim(curl_exec($ch));
curl_close($ch);
你看看吧,应该是没有问题,

虐人心 2017-11-10 1 楼

我拿你的这段代码在我的机器上调试完全没有问题呀(我的环境是PHP5.2.1),能够POST过去,我怀疑你是不是还有其它的操作导致这个数组在转换成字符串是产生了其它的特殊字符,而造成了POST不过去。

//以下是我测试的代码,测试完全通过
//test.php
<?php
$data = array(
'name'=>'scofield',
'time'=>'2012-2-3'
);
$ch = curl_init("http://localhost/test/a.php");
$post_data = http_build_query($data);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_exec($ch);
?>

//a.php
<?php
var_dump($_POST);
?>