NSURLConnection
- 常用類
- NSURL:請求地址
- NSURLRequest:一個NSURLRequest對象就代表一個請求耿戚,包含的信息有
- 一個NSURL對象
- 請求方法(默認(rèn)是GET)寺谤、請求頭窿锉、請求體
- 請求超時
- ...
- NSMutableURLRequest:NSURLRequest的子類 (比如使用POST請求)
- NSURLConnection
- 負(fù)責(zé)發(fā)送請求桅咆,建立客戶端和服務(wù)器的連接
- 發(fā)送數(shù)據(jù)給服務(wù)器王浴,收集來自服務(wù)器的數(shù)據(jù)
- 使用步驟
- 1.創(chuàng)建一個NSURL對象,設(shè)置請求路徑
- 2.傳入NSURL創(chuàng)建一個NSURLRequest對象山卦,設(shè)置請求頭和請求體
- 3.使用NSURLConnection發(fā)送請求
- GET請求
- 01.確定請求路徑NSURL
- URLWithString:
- 02.創(chuàng)建請求對象NSURLRequest
- 該請求對象內(nèi)部默認(rèn)會提供請求頭和(請求體) |請求方法默認(rèn)是GET
- requestWithURL:
- alloc initWithURL:
- 03.使用NSRULConnection發(fā)送GET請求
- 返回值就是響應(yīng)體信息
-
同步請求
鞋邑,開發(fā)中用的不多,網(wǎng)速比較慢的時候會卡住主線程sendSynchronousRequest:...- 參數(shù)一:請求對象
- 參數(shù)二:響應(yīng)頭信息(傳地址)
- 初始化一個響應(yīng)頭信息
- 參數(shù)三:錯誤信息(傳地址)
- 初始化一個錯誤信息
-
異步請求
不會卡住主線程sendAsynchronousRequest:...- 參數(shù)一:請求對象
- 參數(shù)二:隊列账蓉,決定block塊在哪個線程中調(diào)用
- 參數(shù)三:completionHandler完成(成功|失敗)之后的回調(diào)枚碗,response:響應(yīng)頭信息,包含狀態(tài)碼铸本、響應(yīng)時間视译、請求路徑等信息;data:響應(yīng)體信息归敬;connectionError:錯誤信息
- 怎么拿到狀態(tài)碼?
- NSHTTPURLResponse是真實類型和NSURLResponse是繼承關(guān)系
- 強(qiáng)轉(zhuǎn)NSHTTPURLResponse * res = (NSHTTPURLResponse*)response
- res.statusCode
- res.allHeaderFields所有響應(yīng)頭信息
- 04.解析服務(wù)器返回的數(shù)據(jù)
- 看上去好像是字典鄙早,本質(zhì)上字符串
- 把二進(jìn)制數(shù)據(jù)轉(zhuǎn)為字符串
- allocinitWithData:encoding:UTF8
- 05.修改配置文件:ATS
- 01.確定請求路徑NSURL
-
通過代理發(fā)送異步請求
- 01.確定請求路徑NSURL
- URLWithString:
- 02.創(chuàng)建請求對象NSURLRequest
- 該請求對象內(nèi)部默認(rèn)會提供請求頭和(請求體) |請求方法默認(rèn)是GET
- requestWithURL:
- alloc initWithURL:
- 03.設(shè)置代理
- 方法一:NSURLConnection alloc initWithRequest:delegate:
- 方法二:NSURLConnection allocinitWithRequest:delegate:startImmdiately:YES
- 如果設(shè)置startImmdiately為NO汪茧,怎么發(fā)送網(wǎng)絡(luò)請求?調(diào)用start方法發(fā)送網(wǎng)絡(luò)請求
- 怎么拿到服務(wù)器返回數(shù)據(jù)限番?
- 怎么取消請求舱污? cancel
- 04.遵守代理協(xié)議<NSURLConnectionDataDelegate>
- 05.實現(xiàn)代理方法
- 接收到服務(wù)器響應(yīng)的時候調(diào)用connection:didReceiveResponse:
- 初始化可變的數(shù)據(jù)
- 接收到服務(wù)器返回的數(shù)據(jù)的時候調(diào)用connection:didReceiveData:
- 該方法可能會調(diào)用多次
- 拼接服務(wù)器返回的數(shù)據(jù)
- 失敗的時候會調(diào)用connection:didFailWithError:
- 請求完成的時候調(diào)用該方法connectionDidFinishLoading:
- 解析數(shù)據(jù)
- 接收到服務(wù)器響應(yīng)的時候調(diào)用connection:didReceiveResponse:
- 代理使用場景:下載大文件的時候
- 設(shè)置代理好處:監(jiān)聽文件下載進(jìn)度
- 01.確定請求路徑NSURL
-
POST
- 發(fā)送一個異步請求
- 01.確定請求路徑URLWithString:
- 02.創(chuàng)建可變請求對象NSMutableURLRequest
- requestWithURL:
- 默認(rèn)請求頭|請求方法(GET)
- 2.1修改請求方法為POST.HTTPMethod = @"POST"
- 2.2設(shè)置參數(shù),設(shè)置請求體
- username |pwd |type
- .HTTPBody = 把字符串轉(zhuǎn)成二進(jìn)制數(shù)據(jù):[@"username = 1 &pwd = 1 & type = JSON" dataUsingEncoding];
- 2.3設(shè)置其他屬性
- 請求超時時間.timeoutInterval:如果在該時間段內(nèi)沒有完成請求那么就認(rèn)為請求失敗,開發(fā)中一般是15s或30s
- 設(shè)置請求頭信息setValue:forHTTPHeaderField:應(yīng)用場景:如果公司想要收集用戶的信息,可以通過客戶端的環(huán)境來收集User-Agent
- 設(shè)置請求頭多條信息addValue:forHTTPHeaderField:
- 03.發(fā)送異步請求
- 04.解析服務(wù)器返回的數(shù)據(jù)
-
GET請求和POST請求的區(qū)別弥虐?
- GET請求的步驟
- 確定請求路徑(包含參數(shù))
- 創(chuàng)建請求對象
- 使用NSURLConnection發(fā)送請求
- POST請求
- 確定請求路徑(不包含參數(shù))
- 創(chuàng)建可變的請求對象
- 修改請求方法為POST
- 設(shè)置請求體(設(shè)置參數(shù))
- 使用NSURLConnection發(fā)送請求
- 請求路徑的區(qū)別
- GET:協(xié)議頭://主機(jī)地址/接口名稱扩灯?參數(shù)1&參數(shù)2&參數(shù)3
- POST:協(xié)議頭://主機(jī)地址/接口名稱
- GET請求的步驟
- 中文轉(zhuǎn)碼處理
- 確定請求路徑(包含參數(shù))
- username = 李 &pwd =li &type = JSON
- 瀏覽器內(nèi)部在發(fā)送網(wǎng)絡(luò)請求的時候會做中文轉(zhuǎn)碼處理
- [urlStr stringByAddingpERCENTeSCAPESusingEncoding:NSUTF8StringEncoding]
- URLWithString:
- 創(chuàng)建請求對象
- 使用NSURLConnection發(fā)送請求
- 解析數(shù)據(jù)
- 確定請求路徑(包含參數(shù))