Android Web服务,REST或KSOAP2或获取/发布

时间:2014-03-12 09:13:34

标签: android web-services rest ksoap2 android-ksoap2

截至目前,如果我必须将某些内容从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方法并更新他的分数。我怎样才能阻止这种情况发生?

2 个答案:

答案 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 POSTGET的更多文档。您的示例网址是GET方法。它应该用于获取公共信息或查询数据。如果您想在服务器端更改某些内容,则应使用POST方法,它比GET更安全。
我的建议是使用RESTful,因为它比SOAP无痛,尤其是Android
Here是Android上的HTTP POST示例。