網(wǎng)絡編程一
數(shù)據(jù)的傳輸
1、服務器的數(shù)據(jù)是分成一個個單個的數(shù)據(jù)包傳入客戶端
2、客戶端與服務器做數(shù)據(jù)傳輸,數(shù)據(jù)必須約定使用同一種格式
HTTP協(xié)議的概念
1、全稱“超文本傳輸協(xié)議”,瀏覽器和服務器之間的通信規(guī)則
2、HTTP協(xié)議永遠都是客戶端發(fā)起請求,服務器回送響應
3、客戶端發(fā)送一個HTTP請求,是向服務器提交了一個HTTP請求包
4、服務器收到請求之后,向客戶端回應一個HTTP響應包
HTTP的請求方式:GET請求和POST請求
HTTP——請求包結(jié)構(gòu):請求頭、請求體
GET:url、請求頭
POST:url、請求頭、請求體
HTTP的響應包結(jié)構(gòu):響應頭、響應體
HTTP響應有個狀態(tài)碼,200為成功,404未找到頁面
數(shù)據(jù)格式:JSON(主要)、XML
響應頭中Content-Type表示響應體中數(shù)據(jù)的類型
主要類型:text/html、application/json、text/json、text/xml、image/jpeg
NSURLSession的相關使用
(可以參考代碼:UI學習—-UI高級—-07網(wǎng)絡編程—-代碼—-01)
session網(wǎng)絡會話
//1 URL (定位資源)
//2 URLRequest (配置請求:url請求頭[請求體])
//請求方式:默認是get請求
//3 session (會話)<默認發(fā)起的是異步的網(wǎng)絡請求>
//4 task (任務)
//(1)解析錯誤
//(2)查看狀態(tài)碼
//(3)解析data數(shù)據(jù)
//(4)轉(zhuǎn)換成model
//(5)顯示在UI界面上
//5 resume (執(zhí)行任務)
[task resume];//resume:恢復
NSURLRequest
(可以參考代碼:UI學習—-UI高級—-07網(wǎng)絡編程—-代碼—-02)
1、NSURLRequest用于存儲客戶端發(fā)送給服務器的數(shù)據(jù)包信息和請求設置
2、NSURLRequest只有很少的基本設置選項,我大部分使用其子類:NSMutableURLRequest
3、NSURLRequest (url請求頭請求體[post]請求方式緩存策略...)
requestWithURL:url
cachePolicy:緩存策略
timeoutInterval:超時的時間
{NSURLRequestUseProtocolCachePolicy:默認的協(xié)議緩存策略(首先判斷是否有緩存,如果緩存沒有,直接從服務器獲??;如果有緩存,根據(jù)響應中的cache-control中的一個字段判斷,詢問服務器數(shù)據(jù)是否有更新,如果有更新,重新請求服務器)}
//NSURLRequest *request = [NSURLRequest requestWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120];
NSURLSessionConfiguration
1、一個Session可以發(fā)起的多個網(wǎng)絡請求任務(Task)
2、三種類型的任務(Task):
2.1數(shù)據(jù)任務:數(shù)據(jù)任務擅長處理小且頻繁的應用程序與服務器之間的請求,例如:請求JSON數(shù)據(jù),因為數(shù)據(jù)任務不會將數(shù)據(jù)存儲到磁盤文件中,所以不支持后臺Session
2.2下載任務:以文件的形式接收數(shù)據(jù),可以在程序沒有運行時進行后臺下載
2.3上傳任務:以文件的形式發(fā)送數(shù)據(jù),可以在程序沒有運行時進行后臺上傳
3、session(可以參考代碼:UI學習—-UI高級—-07網(wǎng)絡編程—-代碼—-03)
//(1)使用默認的session
//NSURLSession *session = [NSURLSessionsharedSession];
//(2)自定義的session
/*
+defaultSessionConfiguration用于創(chuàng)建默認類型的Session對象
+ephemeralSessionConfiguration用于創(chuàng)建臨時類型的Session對象
+backgroundSessionConfiguration:(NSString*)identifier用于創(chuàng)建后臺Session對象
identifier:作用標示后臺的session,最好和App的bundle id相同
*/
NSURLSessionConfiguration *config =[NSURLSessionConfiguration defaultSessionConfiguration];
//配置屬性
//配置緩存策略
config.requestCachePolicy =NSURLRequestUseProtocolCachePolicy;
//是否使用蜂窩數(shù)據(jù)
config.allowsCellularAccess = YES;
//...
[NSURLSession sessionWithConfiguration:config];
//task
//resume
NSURLResponse(可以參考代碼:UI學習—-UI高級—-07網(wǎng)絡編程—-代碼)
//下載任務
NSURLSessionDownloadTask(可以參考代碼:UI學習—-UI高級—-07網(wǎng)絡編程—-代碼—04)