• 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以后就可以正常的获得了。

  • 相关阅读:
    MYSQL学习(二)
    Nginx学习总结(一)
    关于微服务架构的个人理解(一)
    深入理解Java虚拟机(二) : 垃圾回收
    深入理解Java虚拟机(一) 运行时数据区划分
    多线程系列之 线程安全
    多线程系列之 java多线程的个人理解(二)
    多线程系列之 Java多线程的个人理解(一)
    Java基础04—字符串
    Java基础03—流程控制
  • 原文地址:https://www.cnblogs.com/ainiaa/p/2000262.html
Copyright © 2020-2023  润新知