您的位置:首页 > 编程语言 > PHP开发

安卓客户端与PHP后台通信

2015-12-15 11:32 585 查看
安卓端通过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为什么不能正常获取数据还是不理解,如果有大神路过看见,还望能指点一二。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: