-1

我正在通过 json 对象中的 HTTP Post 将数据从 android 设备发送到我的 cakephp 网站 ..like this

    HttpPost post = new HttpPost("https://www.mywebtest.com/test");

然后我解码json并像这样提取数据

            if ($this->request->isPost()){

        $json = $this->request->data('json');
        $data = json_decode($json, TRUE);

但目前我没有检查 http 帖子或数据是来自我的 android 应用程序还是其他人。所以如果有人知道 url,他可以做一些恶意的事情 ..因为现在我在httpPost中写的 url当我在浏览器中输入此 url 时,浏览器上没有显示任何内容。如果有人在浏览器中输入了 url,我想显示某种错误或 404 页面。本质上,您可以说我正在使用 CakePHP 创建一个API,我想做的是保护API,所以只有我的应用程序可以执行请求。所以我想实现某种类型的身份验证..做一些研究我想出了一个解决方案,将另一个参数作为来自android的秘密令牌传递应用程序,然后从我的 webapp 检查令牌,然后提取数据.. 我不知道如何在 httppost 中传递另一个参数,然后在我的网页上检查它.. 如果可能的话,我想随机生成令牌并加密它每个请求,然后在数据从 android 发布到 webapp 时通过 webapp 中的密钥对其进行解密。如果有人在此之前做过或有想法,请分享代码或任何链接。

4

2 回答 2

0

为参数创建一个 JsonObject,

JSONObject parametersList = new JSONObject();

将您的参数放入该 JSONObject

parametersList.put("testID", 123);

int androidValue = 231231231; // a identifer or password your choice.
parametersList.put("androidValue", androidValue);

并将列表添加到您的 HttpPost

HttpPost request = new HttpPost("https://www.mywebtest.com/test");

request.setHeader(HTTP.CONTENT_TYPE, "application/json; charset=utf-8");

request.setEntity(new StringEntity(parameters.toString(), HTTP.UTF_8));

在php方面;

<?php
$postdata = $HTTP_RAW_POST_DATA;
$data = json_decode($postdata);
$id = $data->testID;
$androidValue = $data->androidValue;

if(androidValue == 231231231)
{
   $json = "{d:[{sample1:'".$id."',sample2:'value12'}]}";
   $response = $_GET["callback"] . $json;
   echo $response;
}
else
{
    // send failed data
}

?>

这如何在 android 端得到响应

            HttpResponse response = client.execute(request);

            final int statusCode = response.getStatusLine().getStatusCode();
            final String jsonResponse = EntityUtils.toString(response.getEntity());

            if (statusCode != HttpStatus.SC_OK) {
                Log.w(TAG, "Error in web request: " + statusCode);
                Log.w(TAG, jsonResponse);
                return null;
            } else {
                Log.i(TAG, jsonResponse);
                return jsonResponse;
            }

我希望这将有所帮助。

于 2013-06-28T08:29:52.697 回答
-1

尝试使用 RequestHandler isMobile()。

如果请求来自手机,你会得到真实的。

http://book.cakephp.org/2.0/en/core-libraries/components/request-handling.html#RequestHandlerComponent::isMobile

于 2013-06-28T12:51:26.547 回答