首页 > 代码库 > PHP处理Android的POST数据
PHP处理Android的POST数据
今天用PHP开发Android网络数据接口的时候,发现Thinkphp的I函数(php的$_POST)并不能获取到androidpost过来的数据
Android代码如下:
1 Map<String,String> map = new HashMap<>(); 2 map.put("itemid",this.itemid); 3 JsonObjectRequest jor = new JsonObjectRequest(Request.Method.POST,url,new JSONObject(map),new Response.Listener<JSONObject>() { 4 @Override 5 public void onResponse(JSONObject jsonObject) { 6 try{ 7 if("OK".equals(jsonObject.getString("status"))){ 8 JSONObject returnDdata = http://www.mamicode.com/jsonObject.getJSONObject("data"); 9 data.clear();10 if("out".equals(returnDdata.getString("inout"))){11 data.add("类型:支出");12 }else{13 data.add("类型:收入");14 }15 data.add("主题:"+returnDdata.getString("info"));16 data.add("金额:"+returnDdata.getString("money"));17 data.add("时间:"+XLFunc.xl_timestamp_to_datetime(returnDdata.getLong("time")*1000,"yyyy-MM-d"));18 data.add("结算:"+returnDdata.getString("result"));19 adapter.notifyDataSetChanged();20 listVview.setLayoutAnimation(lac);21 }else{22 XLFunc.xl_toast(DetailActivity.this,jsonObject.getString("data"),0);23 }24 }catch (JSONException e){25 XLFunc.xl_toast(DetailActivity.this,"网络异常!",0);26 }27 }28 },new Response.ErrorListener() {29 @Override30 public void one rrorResponse(VolleyError volleyError) {31 XLFunc.xl_toast(DetailActivity.this,"获取详细信息时出现错误!请检查网络是否正常!",0);32 }33 }){34 @Override35 public Map<String, String> getHeaders() throws AuthFailureError {36 Map<String,String> headers = new HashMap<>();37 headers.put("Content-Type","application/json; charset=utf-8");38 return headers;39 }40 };41 jor.setShouldCache(false);42 this.requestQqueue.add(jor);
headers设置发送了,也没有使用getParams(网上说使用这个方法服务端得不到POST数据,只能重载JSONObjectRequest,另话,在这不提!)
可是PHP端
var_dump($_POST);
为空!
上网查询后,发现使用如下的方式能够获取到POST数据:
1 $postDdata = file_get_contents(‘php://input‘);2 $postDdata = json_decode($postDdata, true);3 4 $return = array();5 $itemid = intval($postDdata[‘itemid‘]);
也就是说使用php://input输入流的方式获取是能获取的,那么也就是说android端已经正常提交数据了,那么问题出现在PHP端了!
由Android提交数据的headers:
headers.put("Content-Type","application/json; charset=utf-8")
可知,Android端发送的是json,
查看PHP关于$_POST的说明:
$HTTP_POST_VARS contains the same initial information, but is not a superglobal. (Note that $HTTP_POST_VARS and $_POST are different variables and that PHP handles them as such)
然后查看$_POST和php://input的区别:
$HTTP_RAW_POST_DATA contains the raw POST data. In general, php://input should be used instead of $HTTP_RAW_POST_DATA.
可知:php://input通常代替$HTTP_RAW_POST_DATA 而$HTTP_RAW_POST_DATA包含原始提交的数据
而POST是过滤掉不能解析的数据,比如json数据!这些过滤掉的数据就放到了$HTTP_RAW_POST_DATA中,所以我们需要使用php://input来获取post过来的json对 数据!
PHP处理Android的POST数据
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。