V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
q84629462
V2EX  ›  Android

Android 使用 Loopj 的 AsyncHttpClient 发起 post, PHP 输出$_POST 和$_SERVER 都看不到参数,实在找不出问题所在,特来发问。

  •  
  •   q84629462 · 2015-01-29 22:05:16 +08:00 · 6987 次点击
    这是一个创建于 3346 天前的主题,其中的信息可能已经有所发展或是发生改变。
    java:
    RequestParams params = new RequestParams();
    String[] colors = { "blue", "yellow" }; // Ordered collection
    params.put("colors", colors);
    Log.d("params", params.toString());
    http.put(url, params, jsonHandler);
    //jsonHandler是Loopj的BaseJsonHttpResponseHandler
    php:
    <?php
    var_dump($_POST);
    var_dump($_SERVER);
    exit;
    ?>

    java中的log输出,是标准的参数格式:
    params﹕ colors[]=blue&colors[]=yellow

    PHP中输出(其实是java中的jsonHandler也有输出):
    array(0) {
    }
    $_SERVER数组太长了,不列出,见谅。
    但$_SERVER ["REQUEST_METHOD"]是POST

    AsyncHttpClient v1.4.4和v1.4.6都试过,PHP均无法接收到post的数据。
    有两台Android设备用于测试,情况都一样,php接收不到post参数。
    但是随便写个html form post到同一个php文件,php都可以输出post的数据
    Android项目有<uses-permission android:name="android.permission.INTERNET" />权限
    也试过params.add("a","a")随便add个字符参数,php也接收不到。
    实在找不出问题在哪,头都大了。。。
    服务器是LNMP环境,也试过重启Nginx,情况依旧。
    前几个Android项目也是这样用AsyncHttpClient post数据到php的,但这次遇到这问题真奇葩了,求解!
    6 条回复
    huijiewei
        1
    huijiewei  
       2015-01-29 22:11:30 +08:00
    查 Content-Type 了没?
    cevincheung
        2
    cevincheung  
       2015-01-29 22:13:09 +08:00   ❤️ 1
    echo file_get_contents('php://input');


    试试呢
    huijiewei
        3
    huijiewei  
       2015-01-29 22:19:23 +08:00   ❤️ 1
    补充说明下,POST 就是 POST ,不要用 PUT
    q84629462
        4
    q84629462  
    OP
       2015-01-29 22:25:56 +08:00
    @huijiewei
    //AsynchttpClient读取到的$_SERVER
    ["CONTENT_TYPE"]=>
    string(33) "application/x-www-form-urlencoded"
    ["HTTP_CONTENT_TYPE"]=>
    string(33) "application/x-www-form-urlencoded"
    ["HTTP_USER_AGENT"]=>
    string(62) "android-async-http/1.4.4 (http://loopj.com/android-async-http)"

    //随便写一个html form提交的$_SERVER
    ["CONTENT_TYPE"]=>
    string(33) "application/x-www-form-urlencoded"
    ["HTTP_CONTENT_TYPE"]=>
    string(33) "application/x-www-form-urlencoded"
    ["HTTP_USER_AGENT"]=>
    string(120) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36"

    目测这里没有问题


    @cevincheung
    使用echo file_get_contents('php://input');可以看到参数诶,但var_dump($_POST);依然是array(0) {}
    这是什么问题?
    q84629462
        5
    q84629462  
    OP
       2015-01-29 22:27:26 +08:00
    @huijiewei 那个是手误输入错了,原来是这个问题啊,我擦嘞。。。
    q84629462
        6
    q84629462  
    OP
       2015-01-29 22:28:51 +08:00
    @huijiewei 其实我之前的项目也是用post的,可能没想到还有put这个方法,没细看,输入个p就按代码提示功能走了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3397 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:38 · PVG 18:38 · LAX 03:38 · JFK 06:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.