java – 确定是否来自Android App的HTTP请求?然后适当地回应

前端之家收集整理的这篇文章主要介绍了java – 确定是否来自Android App的HTTP请求?然后适当地回应前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我的Android应用程序有一个与之关联的App Widget,它在Android设备上每10分钟更新一次.这些更新将HTTP数据请求发送到服务器并解析服务器响应并根据需要更新应用程序.

截至目前,如果您从笔记本电脑或PC上的浏览器ping该URL,服务器将响应并更新服务器上数据库中所需的任何内容.

我想要做的是当在服务器上收到HTTP请求时,我想确定请求是来自Android设备的Android应用程序,然后使用数据进行响应.我想改变服务器上PHP中的代码,如果HTTP请求来自浏览器或除了我的Android应用程序以外的任何其他内容,它们将显示重定向到某个页面.

来自Apps的典型HTTP请求类似于http://example.com/abc.php?usera=abc&datab=xyz

如果它来自除Android应用程序之外的任何其他地方,我不想以相同的方式回复此URL.这可能吗?什么是实现这一目标的好方法..

谢谢你的帮助.

最佳答案
您可以为请求添加签名,然后在服务器端进行检查.

只需获取查询并在末尾添加一个密码,然后创建一个MD5,您可以将其作为标题发送(或用作用户代理).并在服务器上执行相同操作并检查校验和是否相同.

为了使它更安全,您可以设置时间戳,以便请求仅在短时间内有效.

使您的查询看起来像http://example.com/abc.php?usera=abc&datab=xyz&timestamp=123456789,其中timestamp是当前时间(在unix时间戳中)并在您的应用中添加

public static String makeCheck(String url)
{
    URL u=new URL(url);
    MessageDigest md = MessageDigest.getInstance("MD5");
    u.getQuery();
    md.update(u.getQuery().getBytes());
    BigInteger bn = new BigInteger(1,md.digest("A_SECRET_WORD".getBytes()));
    return bn.toString(16);
}

当你需要添加标题时,请使用以下内容

request.addHeader("X-CHECKSUM",makeCheck(url) );

然后在您的服务器上,您可以使用:

if (md5($_SERVER['QUERY_STRING']."A_SECRET_WORD")!=$_SERVER['X-CHECKSUM']) {
    // Wrong checksum
}

$timediff=60;

if ( $_GET['timestamp']>(time()+$timediff) || $_GET['timestamp']<(time()-$timediff) ) {
    // Bad timestamp
}

记住时间戳有点松弛,因为你的服务器时钟和电话时钟可能有点不同步.

原文链接:https://www.f2er.com/android/431061.html

猜你在找的Android相关文章