安卓系统:如何向PHP网站发出安全请求并获得响应


Android : How to make secure requests and get responses to/from a PHP website?

我在一家公司工作,该公司的用户正在寻找可出租的房子。这些可以通过我们的网站查看。

我希望创建一个Android应用程序,帮助人们在智能手机上找到房子。如何让移动应用程序从Web服务器(PHP/MySQL*)获取数据并向其发出请求?

这不是web服务的定义吗?那么PHP和Android平台版本8(2.2 Froyo)支持什么样的Web服务?

有一个重要要求:它应该是安全的,要求应用程序进行身份验证,即只有应用程序才能访问数据。

*支持Python 2.6.6。我真的很喜欢Python,但我不喜欢混合服务器语言,因为网站100%都是用PHP编写的。

我如何使移动应用程序从Web服务器(PHP/MySQL*)获取数据并向其发出请求?

在安卓系统上,您可以使用旧版本的Apache HTTP客户端。因此,从应用程序到服务器的HTTP请求涵盖了这一方面:

HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("https://www.myserver.com/webservice/xyz");
HttpResponse response = client.execute(request);

只需3行代码,就可以得到一个GET请求。

那是什么Web服务由PHP和Android平台版本8(2.2Froyo)?

有各种不同的web服务库可用于PHP,如SOAP和其他基于XML的协议。就我个人而言,我不会这么做,因为XML太臃肿了。您希望在服务器和客户端之间保持较小的传输数据,因为您要处理的是移动设备、有限的带宽和昂贵的数据计划。JSON是XML的一种更紧凑的替代方案。您还可以创建自己的"二进制"数据格式,用于在服务器和客户端之间交换数据。

在Android方面,您只需要为您选择的web服务寻找合适的Java客户端库。或者,如果你选择自定义解决方案,你只需要自己编写代码。

有一个重要的要求:它应该是安全的,

使用HTTPS

通过要求来自应用程序的身份验证,即只有应用程序能够访问数据。

这是无法可靠执行的,除非您正在处理用户登录,否则是的。如果确实需要用户登录,请查看OAuth。

不要将纯文本密码存储在客户端应用程序或服务器上。

如果你只是想强制要求只有你的应用程序才能访问该web服务,那么你可以在应用程序的HTTP请求标头中添加类似"客户端机密"的字符串。您的服务器将要求存在该秘密字符串,否则访问将被拒绝。

不过,这并不能阻止人们查看你的应用程序来了解这个秘密。你可以通过混淆这个秘密字符串来让它变得更难,比如随机混淆字母等等

您还可以在每次重大更新时定期更改客户端机密。这将要求您的用户拥有进行更新,否则他们将被锁定。

您可能需要考虑在Android应用程序中实现一个函数来查询PHP服务器中的JSON数据(比如JSON simple),并在服务器中实现一种检索GET请求的方法(查看插入$_GET,然后发送回JSON)。

您也可以使用XML、纯文本或其他任何东西,但JSON可能是实现起来最小、最快的。