php curl post数据的问题

今天在做一个api增量的功能的时候出现了一个特别奇怪的问题。我用curl 向tomcat post数据的时候,tomcat竟然报错,说我post的数据没有正确获得。但是,我用curl post给我自己写的一个页面,就可以在$_POST数组中获得数据。

为什么会出现这种问题那?

原因是在构建post 数据的数量出现问题。。。

 
 
1 function api_notice_increment( $url , $data ) 2 { 3 $ch = curl_init(); 4 curl_setopt( $ch , CURLOPT_HEADER , 0 ); 5 curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 ); 6 7 curl_setopt( $ch , CURLOPT_URL , $url ); 8 curl_setopt( $ch , CURLOPT_POST , 1 ); 9 curl_setopt( $ch , CURLOPT_POSTFIELDS , $data ); 10 $lst [ ' rst ' ] = curl_exec( $ch ); 11 $lst [ ' info ' ] = curl_getinfo( $ch ); 12 curl_close( $ch ); 13 return $lst ; 14 } 15 $url = " http://localhost/test/post.api.php?app=test&act=testact " ; 16 $data = array ( 17 ' goods_id ' => ' 1010000001224 ' , 18 ' store_id ' => ' 20708 ' , 19 ' status ' => ' GoodsDownshelf ' , 20 );

//post.api.php的代码

 
 
<? php error_log ( var_export ( $_POST , 1 ) , 3 , ' d:/post.txt ' );

执行上面的代码,在我的d:/生成的post.txt文件,其内容如下:

array (
  'goods_id' => '1010000001224',
  'store_id' => '20708',
  'status' => 'GoodsDownshelf',
)

说明post的数据可以正常的获得。

修改上的代码

 
 
1 <? php 2   function api_notice_increment( $url , $data ) 3 { 4 $ch = curl_init(); 5 curl_setopt( $ch , CURLOPT_HEADER , 0 ); 6 curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 ); 7 8 curl_setopt( $ch , CURLOPT_URL , $url ); 9 curl_setopt( $ch , CURLOPT_POST , 1 ); 10 $data = http_build_query ( $data ); 11 curl_setopt( $ch , CURLOPT_POSTFIELDS , $data ); 12 $lst [ ' rst ' ] = curl_exec( $ch ); 13 $lst [ ' info ' ] = curl_getinfo( $ch ); 14 curl_close( $ch ); 15 return $lst ; 16 } 17 $url = " http://localhost/test/post.api.php?app=test&act=testact " ; 18 $data = array ( 19 ' goods_id ' => ' 1010000001224 ' , 20 ' store_id ' => ' 20708 ' , 21 ' status ' => ' GoodsDownshelf ' , 22 ); 23 24 25 api_notice_increment( $url , $data );

只是在执行 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);之前执行下$data = http_build_query($data);操作。

删除d:/post.txt文件

再次运行。

再次打开d:/post.txt文件,其内容如下:

array (
  'goods_id' => '1010000001224',
  'store_id' => '20708',
  'status' => 'GoodsDownshelf',
)

如果不将$data 进行http_build_query的话,java代码就不能获得post的数据,http_build_query以后就可以正常的获得了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值