当前位置:首页 > PHP教程 > php应用 > 列表

php curl post数据的问题

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-04 15:00:24 浏览: 评论:0 

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

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

原因是在构建post 数据的数量出现问题,代码如下:

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

post.api.php的代码:

<?phperror_log(var_export($_post,1),3,'d:/post.txt');

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

  1. array ( 
  2.   'goods_id' => '1010000001224'
  3.   'store_id' => '20708'
  4.   'status' => 'goodsdownshelf'

说明post的数据可以正常的获得,修改上的代码:

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

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

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

  1. array ( 
  2.   'goods_id' => '1010000001224'
  3.   'store_id' => '20708'
  4.   'status' => 'goodsdownshelf'

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

Tags: php curl post 数据问题

分享到: