安卓客户端与PHP后台通信

这篇博客讲述了安卓客户端如何使用http协议的POST方式与PHP服务器进行数据交互。在PHP端,由于版本问题,作者遇到无法直接通过$_POST获取POST数据的问题。通过调试,作者发现可以通过php://input获取原始数据流,但该方法在PHP 5.6及以后版本中成为只读且限制使用。最终,作者调整了方法,实现了通信和数据的双向传输。对于$_POST的疑惑,作者希望有经验者给予指导。
摘要由CSDN通过智能技术生成

安卓端通过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
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值