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

2015-01-29 22:05:16 +08:00
 q84629462
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的,但这次遇到这问题真奇葩了,求解!
7586 次点击
所在节点    Android
6 条回复
huijiewei
2015-01-29 22:11:30 +08:00
查 Content-Type 了没?
cevincheung
2015-01-29 22:13:09 +08:00
echo file_get_contents('php://input');


试试呢
huijiewei
2015-01-29 22:19:23 +08:00
补充说明下,POST 就是 POST ,不要用 PUT
q84629462
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
2015-01-29 22:27:26 +08:00
@huijiewei 那个是手误输入错了,原来是这个问题啊,我擦嘞。。。
q84629462
2015-01-29 22:28:51 +08:00
@huijiewei 其实我之前的项目也是用post的,可能没想到还有put这个方法,没细看,输入个p就按代码提示功能走了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/166614

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX