Android網絡交互Get,POST簡介

wgd7 9年前發布 | 12K 次閱讀 Java Android

  做移動APP肯定少不了網絡交互,無論是打開網頁(如在手機端打開www.baidu.com)可是與服務器端交互(獲取資料信息,上傳或下載圖片等),都要用到網絡請求。我們常用的網絡請求就是HTTP中的GET與POST。android與網絡交互非常方便的,因為android主要是用java語言開發,所以直接使用java.net包下的API訪問HTTP服務。更方便的是,Android SDK附帶了Apache的HttpClient API。Apache HttpClient是一個完善的HTTP客戶端,它提供了對HTTP協議的全面支持,可以使用HTTP GET和POST等方法進行訪問,操作方便。下面也簡單介紹下兩種方式:

     首先看下GET與POST方式的區別(參照網上資料):

   (1)提交方式:GET提交,請求的數據寫在在URL中(就是把數據放置在HTTP協議頭中),以?分割URL和傳輸數據(參數),多個參數用& 連接。例 如:login.action?name=hyddd&password=idontknow&gender=male。如果數據中全是 英文字母/數字,原樣發送,如果有空格,轉換為+,如果有中文/其他字符,則直接把字符串用BASE64加密。POST提交:把提交的數據(參數)放置在 是HTTP包的包體中。  因此,GET提交的數據會在地址欄中顯示出來,而POST提交,地址欄不會改變

      (2)傳輸數據的大小:HTTP協議沒有對傳輸的數據大小進行限制,HTTP協議規范也沒有對URL長度進行限制。在實際開發中存在的限制主要 是:GET:特定瀏覽器和服務器對URL長度有限制,其限制取決于操作系 統的支持。POST:由于不是通過URL傳值,理論上數據不受限。但實際各個WEB服務器會規定對post提交數據大小進行限制,Apache、IIS6 都有各自的配置。

(3)安全性:POST的安全性要比GET的安全性 高。這 里安全的含義是真正的Security的含義,比如:通過GET提交數據,用戶名和密碼將明文出現在URL上,因為(1)登錄頁面有可能被瀏覽器緩存, (2)其他人查看瀏覽器的歷史紀錄,那么別人就可以拿到你的賬號和密碼了,除此之外,使用GET提交數據還可能會造成Cross-site request forgery攻擊

(4)傳值(參)方法:GET:請求參數是作為一個key/value對的序列(查詢字符串)附加到URL上的查詢字符串的長度受到web瀏覽器和web服務器的限制(如IE最多支持2048個字符),不適合傳輸大型數據集同時,它很不安全。嘏POST:請求參數是在http標題的一個不同部分(名為entity body)傳輸的,這一部分用來傳輸表單信息,因此必須將Content-type設置為:application/x-www-form- urlencoded。post設計用來支持web窗體上的用戶字段,其參數也是作為key/value對傳輸。但是:它不支持復雜數據類型,因為post沒有定義傳輸數據結構的語義和規則。

再分別講講兩個方法的調用方法及步驟:

HTTP GET請求步驟:
   String url="http://......";//請求的網絡地址
      //第一步,創建HttpClient對象
     HttpClient client=new DefaultHttpClient();
      //第二步,創建HttpGet對象
     HttpGet httpGet = new HttpGet(url);
   //第三步,使用execute方法發送HTTP GET請求,并返回HttpResponse對象
     HttpResponse response=client.execute(get);
   //第四步,判斷返回狀態并取出服務器返回的數據
   if (httpResponse.getStatusLine().getStatusCode() == 200)
   {
        //第五步,使用getEntity方法活得返回結果
        String result = EntityUtils.toString(httpResponse.getEntity());
    }

HTTP POST請求步驟:
    String url="http://......";//請求的網絡地址
  //第一步,創建HttpClient對象
     HttpClient client=new DefaultHttpClient();
   //第二步,創建HttpPost對象
   HttpPost httpPost = new HttpPost(url);
   //第三步 設置HTTP POST請求參數必須用NameValuePair對象
   NameValuePair loginName=new NameValuePair ("loginName","用戶名");
   NameValuePair loginPwd=new NameValuePair ("loginPwd","密碼"); 
   List<NameValuePair> params = new ArrayList<NameValuePair>();
   params.add(loginName);
   params.add(loginPwd);
   //設置httpPost請求參數
   httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
   //第四步,使用execute方法發送HTTP GET請求,并返回HttpResponse對象
    HttpResponse response=client.execute(httpPost);;
   if (httpResponse.getStatusLine().getStatusCode() == 200)
   {
        //第五步,使用getEntity方法活得返回結果
        String result = EntityUtils.toString(httpResponse.getEntity());
    }

最后就查處理獲取到的數據結果。
 本文由用戶 wgd7 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!