php使用curl的post方法字符串和数组传值的区别

最近在工作中需要请求第三方的一个java版的接口,起初是使用数组进行传参,代码写完之后发现接口死活调试不通,总是提示传参为空,纠结了很久之后,决定尝试使用字符串传参的方式来请求接口,没想到这次居然调试成功了,这让我有了研究这两者究竟有何区别的兴趣。

本地的测试代码如下:
curl.php

<?php
function curl_post($url, $data){
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
     $output = curl_exec($ch);
     curl_close($ch);
     return $output;
}

$params = array();
$params['username'] = 'ben';
$params['password'] = 'lalala';
print_r(curl_post('http://localhost/curl/post.php', $params));

$params = array();
$params['username'] = urlencode('ben');
$params['password'] = urlencode('lalala');
$paramsStr = "username={$params['username']}&password={$params['password']}";
print_r(curl_post('http://localhost/curl/post.php', $paramsStr));

?>

post.php

<?php echo "-------php://input-----<br/>"; var_dump(@file_get_contents('php://input')); echo "-------post-----<br/>"; var_dump($_POST); echo "-------server-----<br/>"; var_dump($_SERVER);

执行结果可以参照如下截图:
php使用curl的post方法字符串和数组传值的区别
php使用curl的post方法字符串和数组传值的区别

从如上截图我们可以看出,php使用curl的post方法字符串和数组传值有如下几种区别:
1、在使用数组传值时,http头中content_type被设置成了multipart/form-data;而在使用字符串传值时,content_type为application/x-www-data-urlencoded。
2、在使用数组传值时,php://input是接收不到数据的,这和content_type的设置有关,这一点在另一篇文章中也有论述:http://blog.csdn.net/u011250882/article/details/47188883
3、不管使用字符串或数组传参,$_POST在大部分情况下(少数情况例外,如传递xml数据时,具体见http://blog.csdn.net/u011250882/article/details/47188883),都能正确接收参数。

由于不了解java,粗浅的理解为,在java中,对post数据的接收与php中php://input方法相类似,所以才出现了开篇提到的问题。

总结:推荐使用字符串传值的方式,兼容性好,而且数据传输较数组传值更小。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值