在linux命令行下curl 提交json数据的问题

http://www.dewen.org/q/3803

  • PanYue

    2 票

  • 4893

我在linux命令行下执行:

 
         
  1. curl -i -d '{"user":{"uid":123,"username":"woshishui"},"baseinfo":"afsdaa"} '  http://www.domain.com/index.php

而index.php里只有一句print_r($_POST);
执行命令后,为啥显示接收不到数据呢?

 
         
  1. HTTP/1.1 200 OK
  2. Server: nginx/0.8.54
  3. Date: Fri, 27 Jul 2012 08:29:34 GMT
  4. Content-Type: text/html; charset=utf-8
  5. Transfer-Encoding: chunked
  6. Connection: keep-alive
  7. Vary: Accept-Encoding
  8. X-Powered-By: PHP/5.3.6
  9. Array
  10. (
  11. )
PanYue
编辑于 2012-07-27
评论 ( 2) • 分享 • 链接 • 2012-07-27 
  • 0
    不是json格式的数据有问题吗? –  小飞 2012-07-27
  • 0
    参数格式:uid=123&username=这样的没问题 –  PanYue 2012-07-27
2个答案
票 数
  • 何远伦

    3 票

  • 8503

你post的数据没有参数名,这样写就行

 
        
  1. curl -i -X POST -d 'a={"user":{"uid":123,"username":"woshishui"},"baseinfo":"afsdaa"}'  http://www.domain.com/index.php
评论 ( 1) • 链接 • 2012-07-27
  • 0
    是呀,请问这是啥原理? –  PanYue 2012-07-27
  • 冯义军

    3 票

  • 12.4K

提交的参数有问题,应该是:

'json={"user":{"uid":123,"username":"woshishui"},"baseinfo":"afsdaa"}'

 
      
  1. curl -i -d 'json={"user":{"uid":123,"username":"woshishui"},"baseinfo":"afsdaa"}' http://www.domain.com/index.php

index.php 接收 为 $_POST['json'];

评论 ( 3) • 链接 • 2012-07-27
  • 0
    但是我加参数名,在index.php里这样写也可以收到呢:$data = file_get_contents("php://input");
    print_r($data);
    –  PanYue 2012-07-27
  • 0
    @PanYue file_get_contents("php://input") 这种方式是拿原始的post数据
    而 $_POST 是根据原始数据格式化之后的,所以$_POST 就拿不到了,因为你那数据格式不是post形式,原始数据为 arg1=xxx&arg2=xxx2&arg3[]=xxx0&arg3[]=xxx1 才可以正常获取值
    –  冯义军 2012-07-27
  • 0
    哦,晓得了! –  PanYue 2012-07-27

你可能感兴趣的:(linux)