安卓學習筆記5——網絡編程

一、HttpUrlConnection

1.請求數據:get

大致步驟:

			URL url=new URL("https://www.baidu.com");
//            創建httpurlconnection對象
            HttpURLConnection conn= (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            int code =conn.getResponseCode();
             if (code==200){
             InputStream in=conn.getInputStream();}

2.提交數據:get/post

(1)HTTP協議:查看網絡連接過程中http協議內容

包含請求內容和響應內容

請求內容
在這裏插入圖片描述

  • 完整的請求格式包含:請求行、頭信息、請求體
  1. 請求行:請求中第一行信息—-包括三個部分請求方式、資源路徑、HTTP協議版本
    例如:GET/HTTP/1.1
    HTTP請求方式有幾種:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
    常用兩種:GET、POST

  2. 頭信息:包含一些鍵值對,描述請求的信息
    Accept:text/html,image/——-客戶端可以接收文件類型text/htmlTl文件image/任意格式圖片
    Accept-Charset:ISO-8859-1-----客戶端可以識別編碼字行集
    Accept-Encoding:gzip–——-客戶端可以識別壓縮數據格式gzip是一種壓縮格式
    Accept-Language:zh-cn——-客戶端瀏覽器語高,Host:www.itcast.com:80----訪問服務器地址

  3. 請求體:傳輸的數據

響應內容
在這裏插入圖片描述

(2)Post與Get方式提交數據的區別

  1. Get方式: url地址後攜帶數據有大小限制1K(http協議是4k),提交數據在url上顯示;以?分隔url和參數,參數採用鍵值對格式,多個參數使用&符合分隔

如:http://www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD&rsv_spt=1&rsv_iqid=0xa13e92b20002bf94&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_dl=tb&rsv_enter=0

  1. POST 數據在請求體中,不在url上顯示,沒有數據大小跟制
    username=zhangsan 請求體和頭信息直接存在一個空行

(3)使用示例

  • get
    與請求數據無異,差別在於url地址
  • post
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded")
conn.setRequestProperty("Content-Length",data.length()+"");
conn.setDoOutput(true)//設置一個標記允許輸出
conn.getoutputStream().write(data.getBytes());

3.亂碼問題

客戶端與服務器端編碼方式不同
安卓默認編碼方式:utf-8

對於服務器傳輸給客戶端的數據,按照服務器的編碼方式解碼即可
對於傳輸給服務器的數據,比如中文的話,可以先驚醒urlencode

二、httpclient

開源項目,被封裝到android api中

get
在這裏插入圖片描述
post
在這裏插入圖片描述
在這裏插入圖片描述

三、AsyncHttpClient

封裝了子線程,handler等

get
在這裏插入圖片描述

post
在這裏插入圖片描述

四、三種方式的比較

  1. httpurlconnection:可以自己封裝請求頭信息,定製
  2. httpclient(瞭解,沒有人用)
  3. 開源項目(asynchttpclient):通用,方便
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章