截至目前,如果我必须将某些内容从Android存储到服务器,我会发出一个GET
网址的HTTP请求,其中包含参数值形式的数据。在服务器端,我使用PHP来提取参数值并将它们存储在数据库中。
同样,如果我想从服务器获取某些东西到Android,我会使用PHP在网页上发布一个JSON字符串。然后我使用HTTP请求在Android中读取它,将字符串转换为JSON然后使用数据。
这种PHP-MySQL-Android-JSON方法非常简单但不安全。假设我想将Android游戏中的玩家得分存储到服务器的数据库中,很容易从Android执行某些URL www.example.com/save_score.php?player_id=123&score=999
。但是,如果他通过在浏览器中输入此URL来了解php文件名和参数名称,任何人都可以更新他的分数。
那么与服务器交互的正确方法是什么(我的服务器支持PHP但不支持Java)?
我听说过RESTful和KSOAP2,但对它们一无所知。能否请你用非专业人士的语言解释一下(阅读正确的定义并没有帮助我)?这些用于什么?
将分数发送到服务器的最佳方法是什么?任何教程链接都会很棒。
感谢。
修改1 : 出于几个原因,我不使用proguard来模糊我的代码。所以任何人都可以对apk进行逆向工程,查看代码,找到更新分数的URL,编写自己的POST方法并更新他的分数。我怎样才能阻止这种情况发生?
答案 0 :(得分:0)
使用POST方法从android发布数据并在php中获取。例如使用此方法以json formate发送您的数据,这将不会显示在URL中。
public static String sendRequest(String value, String urlString) {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(urlString);
httppost.setHeader( "Content-Type", "application/json");
//value = "";
StringEntity stringEntity = new StringEntity(value);
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType("application/json");
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, System.getProperty("http.agent"));
httppost.setEntity(stringEntity);
HttpResponse response = httpclient.execute(httppost);
String responseString = convertStreamToString(response.getEntity().getContent());
return responseString;
} catch (Exception e) {
Log.d("check", ""+e.getMessage());
return ERROR_SERVICE_NOT_RESPONDE;
}
}
并像这样调用这个方法。
sendRequest({“player_id”:1,“得分”:123},“www.example.com/save_score.php”);
在php中获取json body并解析它。
答案 1 :(得分:0)
我认为您应该在开始之前阅读有关RESTful
,Http POST
和GET
的更多文档。您的示例网址是GET方法。它应该用于获取公共信息或查询数据。如果您想在服务器端更改某些内容,则应使用POST
方法,它比GET
更安全。
我的建议是使用RESTful
,因为它比SOAP
无痛,尤其是Android
。
Here是Android上的HTTP POST示例。