網絡請求需要服務器地址即URL也叫接口:統一資源定位符, (形式:http: 超文本傳輸協議)
NSURL(將網址轉換爲NSURL對象) 創建NSURL對象
創建網絡請求 NSURLRequest NSMutableURLRequest
將字符串轉爲NSData對象 NSData *parmData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];
設置請求體(網絡請求對象調用) setHTTPBody:;設置請求方式(網絡請求對象調用) setHTTPMethod:
NSURLConnection
一,網絡請求有兩種方式:(兩種方式的目的都是傳遞參數)
1,GET請求 : (URL (服務器地址) + ? + 參數(參數都是key=value格式的))
2,POST請求
3,GET請求與POST請求的區別:
1.GET請求的接口會包含參數部分,參數會作爲網址的一部分.服務器地址與參數之間通過 ? 來間隔.POST請求會將服務器地址與參數分開,請求接口中只有服務器地址,而參數會作爲請求體的一部分,提交給後臺服務器. 2.GET請求,參數會出現在接口中,不安全,而POST請求相對安全. 3.雖然GET請求與POST請求可以用來請求與提交數據,但是一般情況GET多用於從後臺請求數據,POST多用於向後臺提交數據.
二,兩種請求過程
1,創建GET請求
(1),將網址初始化成OC字符串對象
如:
NSString *urlString = [NSString stringWithFormat:@"%@?query=%@®ion=%@&output=json&ak=6E823f587c95f0148c19993539b99295", kBusinessInfoURL,@"銀行", @"濟南"];
如果網址中存在中文,進行URLEncode轉換
NSString *newURLString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
(2),構建網絡URL對象,NSURL(將網址轉換爲NSURL對象)
NSURL *url = [NSURL URLWithString:newURLString];
(3),創建網絡請求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
2,創建POST請求
post請求需要創建參數字符串對象並將字符串對象轉爲NSData對象,設置請求體和請求方式,對於GET請求不能設置請求方式,但可以查看請求方式
(1),將網址初始化成OC字符串對象
NSString *urlString = [NSString stringWithFormat:@"%@", @"http://api.tudou.com/v3/gw"];
如果網址中存在中文,進行URLEncode轉換
(2),構建網絡URL對象,NSURL(將網址轉換爲NSURL對象)
NSURL *url = [NSURL URLWithString:urlString];
(3),創建網絡請求(由於POST請求接收的數據是一段一段的需要拼接,因襲請求對象是可變的)
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
(4),創建參數字符串對象,
NSString *parmStr = [NSString stringWithFormat:@"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10"];
(5),將字符串轉爲NSData對象 NSData *parmData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];(6),設置請求體 [request setHTTPBody:parmData];(7),設置請求方式 [request setHTTPMethod:@"POST"];三,網絡連接
網絡鏈接分爲兩種:異步鏈接和同步鏈接
同步和異步的區別:
(1),同步連接:主線程去請求數據,當數據未請求完畢之前,其他操作一律不響應.會造成程序的假死現象.(2),異步連接:會單獨開一個線程去處理網絡請求,主線程依然處理用戶交互.程序運行流暢
我們常用的是異步鏈接
1,GET請求的鏈接
(1),同步鏈接
NSURLResponse *response = nil; NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
(2),異步鏈接需要服從議NSURLConnectionDataDelegate
該協議又服從NSURLConnectionDelegate協議
[NSURLConnection connectionWithRequest:request delegate:self];
2,POST請求的鏈接
(1),同步鏈接
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
(2),異步鏈接,需要服從議NSURLConnectionDataDelegate
該協議又服從NSURLConnectionDelegate協議
[NSURLConnection connectionWithRequest:request delegate:self];
NSURLConnectionDataDelegate方法:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { length = [response expectedContentLength]; NSLog(@"%lld", length); //當收到服務器響應時,爲data開闢空間,接下來服務器要返回數據 self.data = [NSMutableData data]; }
//當收到服務器返回的數據時觸發,返回的可能是資源片段. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { //拼接數據 [self.data appendData:data]; CGFloat rate = self.data.length * 1.0 / length; NSLog(@"%.2f", rate); }
//當服務器返回所有數據時觸發,數據返回完畢 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { // self.data;//就是服務器返回的所有的數據 //解析 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@", dic); }
NSURLConnectionDelegate協議方法 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"error"); } - (void)viewDidLoad
四,請求完數據需對數據進行解析
XML解析兩種解析原理: SAX解析:是一種基於事件回調的解析機制,就是使用協議以及代理.SAX解析是逐行解析,讀入數據時只讀入一行,一行一行的解析,所以SAX解析佔用內存較小,適合於大數據解析 DOM解析:一次性將內容全部讀入內存,將內容讀成樹形結構,逐層解析,適合小數據解析
JSON解析
對於JSONKit提供的解析方式,是爲NSString,NSData添加分類的方式,在分類中添加了解析的方法.效率僅次於系統的. 將JSON格式數據解析成NSArray,NSDictionary.而爲NSArray,NSDictionary添加的分類的方法,則是將OC的對象,轉化爲JSON格式的字符串
網絡請求
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
搞搞, 超星爾雅;
sewerganger
2019-02-24 22:44:54
GNS3、VMware和物理機搭建網絡模擬環境(一)
lvqingpu
2019-02-24 13:15:35
對某網站的一次掃描及滲 透測試
qq5c6f4fa42f069
2019-02-24 12:58:23
綜合實驗的解決方案----目錄服務
zheng4918
2019-02-23 14:05:36
綜合實驗的解決方案----備份服務及其他
zheng4918
2019-02-23 14:05:35
vlan間路由的問題
白璐
2019-02-23 14:05:19
5月14日期待與大家見面!推廣51CTO技術沙龍第五期:IT技術人茫茫職業人生路
白璐
2019-02-23 14:05:19
金融危機下如何獲得工作和跳槽機會-網絡系統工程師的最終歸宿(二)
白璐
2019-02-23 14:05:08
bat記錄遠程桌面連接登錄信息
jason1982
2019-02-24 12:57:09
Exchange Server 2010 POP3&IMAP設置詳解
lingping
2019-02-23 14:05:54
虛擬化技術--服務器虛擬化
dawei818
2019-02-23 14:05:39
windows 2008 全新仲裁模式
qyh282110204
2019-02-23 14:05:36