安卓客户端与PHP后台通信

来源:互联网 发布:淘宝ued团队博客 编辑:程序博客网 时间:2024/05/14 17:14

安卓端通过http协议的post方式访问服务器php后台,并传送数据过来,数据格式是key1=value1&key2=value2·····的形式,安卓端代码形式:

public static String doPost(String url, Map<String, String> params) {                 String response = null;                 HttpClient client = new HttpClient();                 HttpMethod method = new PostMethod(url);                 for (Iterator it = params.entrySet().iterator(); it.hasNext();) {                 }                 //设置Http Post数据                 if (params != null) {                         HttpMethodParams p = new HttpMethodParams();                         for (Map.Entry<String, String> entry : params.entrySet()) {                                 p.setParameter(entry.getKey(), entry.getValue());                         }                         method.setParams(p);                 }                 try {                         client.executeMethod(method);                         if (method.getStatusCode() == HttpStatus.SC_OK) {                                 response = method.getResponseBodyAsString();                         }                 } catch (IOException e) {                         log.error("执行HTTP Post请求" + url + "时,发生异常!", e);                 } finally {                         method.releaseConnection();                 }                 return response;         } 

服务器端PHP通过$_POST方式确取不到传递过来的值,$_POST用来获取通信数据,有时候会出现状况,自己就遇到了,调试了很久,打印出$_SERVER,发现可以获取到http协议传送的所有信息,在数据流里找到了HTTP_DATA元素值就是客户端POST的原生数据,PHP版本5.6之前,有一个方法$HTTP_RAW_POST_DATA可以获取POST方式的原生数据,但是5.6版本就已经弃用了这个方法,改为了file_get_contents("php://input")来代替使用$HTTP_RAW_POST_DATA,因为$HTTP_RAW_POST_DATA还需要特殊的php.ini配置,另外php://input还可以在未申明enctype=”multipart/form-data”的情况下使用。5.6版本前也可以用php://input方法,此方法为只读形式,5.6以前版本只能读取一次。因此重新采用了一下方式来重读数据:

if(empty($_POST)){    $str = file_get_contents("php://input");    parse_str($str,$arraypush);    file_put_contents('input.txt',$str);}else{    $arraypush = $_POST;    file_put_contents('input.txt',json_encode($arraypush));}

使用以上方法成功实现了与客户端的通信和数据双向传输,作为一个新手,对$_POST为什么不能正常获取数据还是不理解,如果有大神路过看见,还望能指点一二。

0 0
原创粉丝点击