Android--HttpURLConnection和HttpClient

來源:互聯網
上載者:User

標籤:

webview說在前面

webView控制項,其hi就是向百度發送了一條HTTP請求,伺服器返回百度首頁的代碼發送過來,webview呼叫瀏覽器的核心對它進行解析,呈現出來。

webview已經在後台幫我們處理好了發送HTTP請求、接受服務響應、解析返回資料、以及最終呈現頁面這幾部。封裝的太好了。

HttpURLConnection

四步掌握httpURLConnection

1、獲得HttpURLConnection的執行個體,一般只需new 出一個URL對象,並傳入目標的網路地址。然後openConneciton()獲得執行個體

URL url = new URL("http://www.baidu.com");HttpURLConnection connect = (HttpURLConnection)url.openConnection();

 

2、佈建要求使用的方法

Get表示希望從伺服器那裡擷取資料。

Post表示則表示希望提交資料給伺服器。

connect.setRequestMethod("GET");

 

接下來就有一些自由的定製了

連線逾時,讀取逾時

connect.setConnectTimeout(8000);connect.setReadTimeout(8000);

3、再調用getInputStream()就可以擷取伺服器返回的輸入資料流了。剩下的任務是對輸入資料流進行讀取

InputStream in = connect.getInputStream();
...
...
...

 

4、關閉HTTP串連

connect.disconnect();

 

總結:發送HTTP請求-->時間長,子線程-->更新UI,非同步訊息處理機制(Message,handler)-->網路許可權

如果要提交資料給伺服器,其實也不複雜,只需要將HTTP的要求方法改成POST,並在擷取輸入資料流之前把資料寫出即可。注意每條資料必須以索引值對存在,資料與資料之間用&符號隔開。

例:向伺服器提交使用者名稱和密碼:

connect.setRequestMethod("POST");DataOutputStream out = new DataOutputStream(connect.getOutputStream);out.wtiteBytes("username=admin&password=123456");

 

HttpClient

使用HttpClient發送請求、接收響應很簡單,一般需要如下幾步即可。

1. 建立HttpClient對象。建立要求方法的執行個體,首先,它是一個介面,無法對它執行個體化。通常會建立一個DefaultHttpClient();

2. 指定請求URL。如果需要發送GET請求,建立HttpGet對象;如果需要發送POST請求,建立HttpPost對象。

3. 如果需要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數;對於HttpPost對象而言,也可調用setEntity(HttpEntity entity)方法來佈建要求參數。

4. 調用HttpClient對象的execute(HttpUriRequest request)發送請求,該方法返回一個HttpResponse。

5. 調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可擷取伺服器的回應標頭;

調用HttpResponse的getEntity()方法可擷取HttpEntity對象,該對象封裝了伺服器的響應內容。程式可通過該對象擷取伺服器的響應內容。

6. 釋放串連。無論執行方法是否成功,都必須釋放串連

 

 

httpGet請求

    HttpClient httpClient = new DefaultHttpClient();    HttpGet httpGet = new HttpPost("http://www.baidu.com");     HttpRequest httpRequest = HttpClient.execute(httpGet);

httpPost請求

        HttpClient httpClient = new DefaultHttpClient();        HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceJ.action");          // 建立參數隊列        List<namevaluepair> params = new ArrayList<namevaluepair>();          params.add(new BasicNameValuePair("username", "admin"));          params.add(new BasicNameValuePair("password", "123456"));          //將隊列傳入        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params,"utf-8");        //將構建好的UrlEncodedFormEntity傳入        HttpPost.setEntity(entity);                HttpRequest httpResponse = HttpClient.execute(HttpPost);

 

execute()之後,會返回一個HttpResponse對象。伺服器返回的所有資訊都包含在這裡面,通常情況下我們都會先取出伺服器返回的狀態代碼,如果等於200就說明請求和響應成功了。如下所示:

 

if(httpResponse.getStatusLine().getStatusCode()==200){    //請求響應成功     HttpEntity entity = response.getEntity();        if (entity != null) {            System.out.println("Response content: " + EntityUtils.toString(entity));  //如果有中文,這個會導致亂碼。          System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8"));            //這裡可以使用Message對象。發送出去。      }  }

 

Android--HttpURLConnection和HttpClient

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.