我的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×tamp=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}
记住时间戳有点松弛,因为你的服务器时钟和电话时钟可能有点不同步. 总结
以上是内存溢出为你收集整理的java – 确定是否来自Android App的HTTP请求?然后适当地回应全部内容,希望文章能够帮你解决java – 确定是否来自Android App的HTTP请求?然后适当地回应所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)