安卓學習筆記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協議內容
包含請求內容和響應內容
請求內容
- 完整的請求格式包含:請求行、頭信息、請求體
-
請求行:請求中第一行信息—-包括三個部分請求方式、資源路徑、HTTP協議版本
例如:GET/HTTP/1.1
HTTP請求方式有幾種:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用兩種:GET、POST -
頭信息:包含一些鍵值對,描述請求的信息
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----訪問服務器地址 -
請求體:傳輸的數據
響應內容
(2)Post與Get方式提交數據的區別
- 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
- 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
四、三種方式的比較
- httpurlconnection:可以自己封裝請求頭信息,定製
- httpclient(瞭解,沒有人用)
- 開源項目(asynchttpclient):通用,方便