2012-07-16 23 views
0

我正在爲用戶正在尋找房屋出租的企業工作。 這些可以通過我們的網站查看。Android:如何提出安全請求並獲取PHP網站的響應?

我期待創建一個Android應用程序,以幫助人們在他們的智能手機上找到房屋。我如何讓移動應用程序從網絡服務器(PHP/MySQL *)獲取數據並向它發出請求?

這不是Web服務的定義嗎?那麼PHP和Android平臺版本8(2.2 Froyo)支持哪種web服務?

有一個重要的要求:它應該是安全的,要求從應用程序進行身份驗證,即只有應用程序能夠訪問數據。

*支持Python 2.6.6。我真的很喜歡Python,但我不希望混合使用服務器語言,因爲100%的網站都是用PHP編寫的。

回答

2

如何讓移動應用程序獲取來自web服務器(PHP/MySQL *)的數據 並向它發出請求?

在Android上,您的舊版本的Apache HTTP Client可用。所以這一方面適用於從您的應用程序到您的服務器的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.2 升級Froyo)的支持?

有一個variety of different web-service libraries可用於PHP,如SOAP和其他基於XML的協議。我個人不會那麼做,因爲XML很臃腫。您希望在服務器和客戶端之間保持較小的傳輸數據,因爲您正在處理移動設備,有限的帶寬和昂貴的數據計劃。 JSON是XML的更緊湊的替代方案。您也可以創建自己的「二進制」數據格式來在服務器和客戶端之間交換數據。

在Android方面,您只需要爲您選擇的Web服務尋找合適的Java客戶端庫。或者,如果您選擇自定義解決方案,您只需自己編寫代碼。

有一個重要的要求:它應該是安全的,

使用HTTPS

通過從應用程序,即需要 認證只有應用程序 能夠訪問數據。

這不能可靠地執行,除非你正在處理用戶登錄,那麼是的。如果您確實需要您的用戶登錄,那麼請查看OAuth。

不要在您的客戶端應用程序和服務器上存儲純文本密碼。

如果你只是想強制,只有您的應用程序可以訪問Web服務,那麼你可以像一個「客戶端祕密」字符串添加到應用程序的HTTP請求頭添加的東西。您的服務器將要求該祕密字符串存在,否則訪問將被拒絕。

這不會阻止其他人在看你的應用程序搞清楚這個祕密,雖然。通過模糊這個祕密字符串,就可以讓它變得更加困難,就像隨機在字母周圍混淆等等。

您還可以定期更改每個主要更新的客戶端祕密。這將要求你的用戶更新,否則他們將被鎖定。

+0

+1我認爲在這個答案中有很多優秀的建議 – Trevor 2012-07-16 17:33:01

+0

非常感謝你給出了這個非常好的答案我最終決定使用JSON我不得不用PHP/MySQL/JSON編碼掙扎,但現在它運行得非常好。不能使用HTTPs,但至少我使用一個額外的參數作爲驗證其他參數的意思)。 – tiktak 2012-07-29 20:50:46

0

您可能想要考慮實現一個函數來查詢您的Android應用程序中的JSON數據的PHP服務器(如json-simple),並在您的服務器中獲取GET請求(查看插入$ _GET然後發回JSON)。

您可以使用XML,明文或其他任何東西,但JSON可能是最小的,也是最快實施的。

+0

是的,我不得不爲iPhone應用程序服務器部分,他們希望它在XML中。通過比較幾個響應的大小,JSON比XML更緊湊80%。如果我使用更智能的輸出,我甚至可以達到95%。 (例如,不是返回:{'house1':'true','house2':'false',...},輸出僅爲active_houses = ['house1','house4']。 – tiktak 2012-07-29 20:54:32

相關問題