Android之Http網路編程(一)

來源:互聯網
上載者:User

標籤:android   style   blog   http   color   io   os   使用   ar   

Android應用作為一個用戶端程式絕大部分都是需要進行網路請求和訪問的,而http通訊是一種比較常見並常用的通訊方式。

在Android中http網路編程中有兩種實現方式,一種是使用HttpURLConnection,另一種就是使用HttpClient。

這兩種實現方式的大體過程都是:

  1. Android用戶端向伺服器發出請求。
  2. 服務端接收請求並響應。
  3. 服務端返回資料給用戶端。

在Http通訊中有POST和GET兩種方式,其不同之處在於GET方式可以獲得靜態頁面,同時可以將請求參數放在URL字串後面,傳遞給伺服器;而POST方式的參數則是放在Http請求中的。因此,無論你是用哪一種HTTP實現方式都需要明確所使用的請求方式。

 

下面我們我們先來認識HttpURLConnection:

HttpURLConnection繼承於URLConnection類,二者都是抽象類別。其對象主要通過URL對象的openConnection方法建立,在獲得HttpURLConnection對象之後,預設採用GET方式請求資料,此時即可使用輸入資料流讀取資訊。

樣本如下:(其中strurl為“http://www.baidu.com”)

private HttpURLConnection conn;

URL url = new URL(strurl);conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");//佈建要求方式conn.setConnectTimeout(6 * 1000);//設定連線逾時的時間conn.setReadTimeout(8000);//設定讀取逾時的毫秒數if (conn.getResponseCode() != 200)//判斷是否請求成功          throw new RuntimeException("運行異常");//擷取伺服器返回的輸入資料流InputStream is = conn.getInputStream();

如果使用POST方式,還需要對一些參數進行設定(包括上面樣本中的一些設定,除此之外還有以下常見設定)。

          conn.setConnectTimeout(6 * 1000);//設定連線逾時的時間                    conn.setReadTimeout(8000);//設定讀取逾時的毫秒數                    conn.setDoOutput(true);//是否允許輸出                    conn.setUseCaches(false);//是否使用緩衝                    conn.setRequestMethod("POST");//佈建要求方式                    conn.setInstanceFollowRedirects(true);//是否自動執行http重新導向                    //以下設定一般請求屬性,即網頁的頭部資訊                    conn.setRequestProperty("Charset", "UTF-8");                 conn.setRequestProperty("Connection", "Keep-Alive");                 conn.setRequestProperty("Content-Type", "application/x-www-from-urlencoded");                 conn.setRequestProperty("Content-Length", String.valueOf(data.length));

HttpURLConnection根據使用目的不同,在具體使用時會稍有區別。下面,就常見的幾種應用舉例說明。

  1.  從Internet擷取網頁,即向URL發送請求,將網頁以流的形式讀回本地。
  2. 從Internet擷取檔案,即利用HttpURLConnection對象從網路中擷取檔案資料。
  3. 向Internet發送請求參數,即向伺服器傳遞參數,即向伺服器傳遞參數。
  4. 向Internet傳送XML資料。(使用HTTP的的方式傳輸檔案,一般檔案大小在5M一下,HTTP通訊方式不適合傳輸大檔案,對大檔案的傳輸最好使用Socket通訊方式,以保證程式的穩定性。)

 下面我們以第一種為例:

static String strurl = "http://www.baidu.com";

public static void testHttpUrlConnection() {        new Thread(new Runnable() {            private HttpURLConnection conn;            public void run() {                                try {                    URL url = new URL(strurl);                    conn = (HttpURLConnection) url.openConnection();                    conn.setRequestMethod("GET");//佈建要求方式                    conn.setConnectTimeout(6 * 1000);//設定連線逾時的時間                    conn.setReadTimeout(8000);//設定讀取逾時的毫秒數                                        if (conn.getResponseCode() != 200)//判斷是否請求成功                        throw new RuntimeException("運行異常");                    //擷取伺服器返回的輸入資料流                    InputStream is = conn.getInputStream();                    String str = convertStreamToString(is);                    System.out.println("HttpUrlConnection方式"+str);                } catch (Exception e) {                    System.out.println("utils異常");                    e.printStackTrace();                }                //關閉http連結                conn.disconnect();            }        }).start();    }

 

將流轉換成字串

/**     * 將流轉換成字串     *      * @param is     * @return     */    public static String convertStreamToString(InputStream is) {        /*         * To convert the InputStream to String we use the         * BufferedReader.readLine() method. We iterate until the BufferedReader         * return null which means there‘s no more data to read. Each line will         * appended to a StringBuilder and returned as String.         */        BufferedReader reader = new BufferedReader(new InputStreamReader(is));        StringBuilder sb = new StringBuilder();        String line = null;        try {            while ((line = reader.readLine()) != null) {                sb.append(line + "\n");            }        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                is.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return sb.toString();    }

 

 

運行程式,測試結果如下:

擷取網頁成功。

 

接下來,我們來簡單的認識HttpClient:

HttpClient是Apache Jakarta Common下的子項目,用來提供高效的、最新的、功能豐富的支援HTTP協議的用戶端編程工具包,並且它支援HTTP協議最新的版本和建議。HttpClient已經應用在很多的項目中,比如Apache Jakarta上很著名的另外兩個開源項目Cactus和HTMLUnit都使用了HttpClient。

httpClient相比傳統JDK內建的URLConnection,增加了易用性和靈活性。它不僅是用戶端發送Http請求變得容易,而且也方便了開發人員測試介面(基於Http協議的),即提高了開發的效率,也方便提高代碼的健壯性。

 

我們用HttpClient實現上面HttpURLConnection擷取百度網頁的同樣的功能。

public static void testHtppClient() {        new Thread(new Runnable() {            @Override            public void run() {                HttpClient client = new DefaultHttpClient();                HttpGet request = new HttpGet(strurl);                HttpResponse response;                try {                    response = client.execute(request);                    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {                        String str = EntityUtils.toString(response.getEntity());                        System.out.println("HtppClient實現方式"+str);                    }                } catch (ClientProtocolException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }).start();    }

結果如下:

 

目前,兩種http通訊的最常見的最簡單的使用我們都會了。至於這兩種通訊方式的更進一步的使用,需要我們大家更進一步的學習和理解,加油!

Android之Http網路編程(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.