日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS-----使用NSURLConnection

發布時間:2025/3/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS-----使用NSURLConnection 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用NSURLConnection???

如果只是為了讀取HTTP等服務器數據,或向服務器提交數據,iOS還提供了NSURLConnection類,NSURLConnection使用NSURLRequest向遠程服務器發送同步或異步請求,并獲取服務器響應的數據。除了NSURLRequest之外,還可使用NSMutableURLRequest向服務器發送數據。

使用NSURLConnection從網絡獲取數據

? NSURLConnection可用于根據URL加載服務器響應,該對象的方法并不多,如果使用該對象來異步加載服務器響應,則需要為該對象指定一個遵守NSURLConnectionDelegate協議的對象,該對象作為NSURLConnection的delegate,負責處理異步加載過程中的事件。

?? 除此之外,還可使用NSURLConnection的sendSynchronousRequest:returningResponse:error:類方法同步架子啊服務器響應。

?? NSURLConnection大致提供了如下常用的方法。

?

- (NSURLRequest *)originalRequest: 獲取該NSURLConnection最初的NSURLRequest對象的深拷貝

- (NSURLRequest *)currentRequest: 返回該NSURLConnection當前使用的NSURLRequest對象

采用同步請求的方式獲取網絡數據的方法如下

+ sendSynchronousRequest:returningResponse:error:第1個參數代表發送請求的NSURLRequest對象;第2個參數需要傳入NSURLRequest對象的指針,用于獲取服務器響應對象;第3個參數用于保存獲取的錯誤信息。

采用異步請求的方式獲取網絡數據的方法如下

+ connectionWithRequest:delegate::采用異步請求的方式獲取數據。第2個參數作為NSURLConnection的delegate。

- initWithRequest:delegate: : 與上一個方法基本相同,只是該方法是實例方法,必須先調用alloc,再調用該方法

- initWithRequest:delegate:startImmediately:: 與前一個方法的功能基本相似,只是多了一個startImmediately參數,該參數控制是否立即發送請求

+ sendAsynchronousRequest:queue:completionHandler: : 該方法需要額外指定NSOperationQueue參數,表明將請求交給指定的NSOperationQueue處理.

- ?start: 開始發送請求.只是當通過- initWithRequest:delegate:startImmediately:方法發送請求,且最后一個參數為NO時,才需要調用該方法。

使用NSURLConnection從網絡獲取數據的步驟如下

1.??????? 創建NSURLRequest對象,該對象代表對遠程服務器的請求。該對象可以包括請求的URL、緩存策略、超時時長等信息。

2.??????? 調用NSURLConnection的實例方法或類方法,以NSURLRequest對象為參數創建NSURLConnection即可發送請求。

3.??????? 如果調用方法以異步方式加載服務器響應,則需要為NSURLConnection對象指定delegate對象,因此還需要為delegete對象實現特定的方法。

代碼片段

ViewController.m@implementation ViewControllerNSMUtableData* totalData;- (void)viewDidLoad{[super viewDidLoad];NSString* str = @http://www.crazyit.ory/ethos.php; totalData = [[NSMutableData alloc] init];// 以指定NSString創建NSURL對象 NSURL * url = [NSURL URLWithString:str];// 創建NSURLRequest對象// NSURLRequest* request = [NSURLRequest requestWithURL:url];// 通過這種方式創建的NSURLRequest可以指定緩存策略、超時時長 NSURLRequest* request = [NSURLRequest requestWithURL:urlcachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5];// 以指定URL、delegate創建連接、發送請求 NSURLConnection* conn = [NSURLConnection connectionWithRequest:request delegate:self ];// 如果conn為nil,則直接返回if(conn !=nil){return;}}// 當服務器響應生成時激發該方法- (void)connection: (NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{NSLog(@”++didReceiveResponse++”);NSLog(@”響應的數據類型:: %@” , response.MIMEType);// 獲取響應數據的長度,如果不能檢測到長度,則返回NSURLResponseUnknownLength(-1) NSLog(@”響應的數據長度為: %lld”, response.expectedContentLength);NSLog(@”響應的數據所使用的字符集: %@”, response.textEncodingName);NSLog(@”響應的文件名: %@”, response.suggestedFilename);}// 每次讀取服務器響應的數據時,都會激發該方法// 對于一個請求而言,服務器數據可能要分幾次才能讀取,因此該方法將會被處罰多次// 如果程序需要將這些數據轉換成字符串,則建議使用NSMutableData來收集這些數據.然后整體轉換- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*) data{[totalData appendData:data];}// 當連接服務器出現錯誤時激發該方法.可通過error獲取錯誤信息- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{NSLog(@”++error++”);}// 當數據load完成時激發該方法.對于每次請求,該方法只會被激發一次- (void)connectionDidFinishLoading:(NSURLConnection *)connection{NSLog(@”++finishLoading++”);NSString* content = [[NSString alloc] initWithData:totalDataencoding:NSUTF8StringEncoding];// 清空所有數據 [totalData setLength:0];self.showView.text = content;}@end

?

? 上面程序中的第1行紅色字代碼創建了一個NSURLRequest對象,第2行紅色字代碼以NSURLRequest對象為參數,以該視圖控制器本身作為delegate,創建了NSURLConnection對象,創建該對象即可向遠程服務器發送請求。

?? 由于程序制定使用視圖控制器本身作為NSURLConnection的delegate,因此該視圖控制器實現了NSURLConnectionDataDelegate協議,并實現了該協議中幾個特定的方法。

?? 隨著服務器響應的到來,NSURLConnection的delegate對象的如下方法依次被調用

1.??????? connection:didReceiveResponse: 當服務器響應到來時,激發該方法

2.??????? connection: didReceiveData: 每次讀取服務器響應的數據時,都會激發該方法.對于一個請求而言, 服務器數據可能要分幾次才能讀取, 因此該方法將會被觸發多次.

3.??????? connectionDidFinishLoading: 服務器響應讀取完成時激發該方法.

?
?

?

?

使用NSMutableURLRequest向服務器發送數據

? NSMutableURLRequest不僅可以添加請求頭,還可以添加請求參數,這樣即可向服務器發送數據了.

NSMutableURLRequest新增了如下常用方法

- addValue:forHTTPHeaderField: 該方法用于為NSMutableURLRequest添加請求頭

- setAllHTTPHeaderFields: 該方法通過一個NSDictionary一次性地為NSMutableURLRequest設置多個請求頭

- setHTTPBody: 設置NSMutableURLRequest的請求體數據-----也就是設置請求參數

- setHTTPBodyStream: 以NSInputStream為參數設置NSMutableURLRequest的請求體數據.該方法與setHTTPBody方法只能設置一個

- ?setHTTPMethod: 設置提交請求的方式,要么是POST,要么是GET, 默認是GET.

-? setHTTPShouldHandleCookies: 設置該HTTP請求是否處理Cookie.

-? setValue:forHTTPHeaderField: 為指定的請求頭設置請求值

代碼示例

1 ViewController.m 2 3 @implementation ViewController 4 5 NSMutableData* totalData; 6 7 - (void)viewDidLoad 8 9 { 10 11 [super viewDidLoad]; 12 13 NSString* str = @”http://192.168.1.88.8888/abc/login.jsp”; 14 15 totalData = [[NSMutableData alloc] init]; 16 17 // 以指定NSString創建NSURL對象 18 19 NSURL* url = [NSURL URLWithString:str]; 20 21 // 創建NSURLRequest對象 22 23 // NSURLRequest* request = [NSURLRequest requestWithURL: url]; 24 25 // 通過這種方式創建的NSURLRequest可以指定緩存策略、超時時長 26 27 NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url 28 29 cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 30 31 timeoutInterval:5]; 32 33 // --------------------下面代碼開始設置請求參數-------------------- 34 35 // 準備請求參數 36 37 NSString* post = [NSString stringWithFormat:@”name=%@&pass=%@”, @”crazyit.org”, @”瘋狂軟件”]; 38 39 // 將請求參數轉換為NSData 40 41 NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; 42 43 NSString *postLength = [NSString stringWithFormat:@”%d”, [postData length]]; 44 45 // 設置請求的方式,默認發送GET請求 46 47 [request setHTTPMethod:@”POST”]; 48 49 // 添加兩個請求頭 50 51 [request setValue:postLength forHTTPHeaderField:@”Content-Length”]; 52 53 [request setValue:@”application/x-www-form-urlencoded” 54 55 forHTTPHeaderField:@”Content-Type”]; 56 57 // 將請求數據設置為HTTP請求體 58 59 [request setHTTPBody:postData]; 60 61 // 以指定URL、delegate創建連接、發送請求 62 63 NSURLConnection* conn = [NSURLConnection connectionWithRequest:request 64 65 delegate:self]; 66 67 // 如果conn為nil,則直接返回 68 69 if(conn != nil) 70 71 { 72 73 return; 74 75 } 76 77 } 78 79 // 當服務器響應生成時激發該方法 80 81 - (void)connection: (NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 82 83 { 84 85 NSLog(@”++didReceiveResponse++”); 86 87 NSLog(@”響應的數據類型:: %@” , response.MIMEType); 88 89 // 獲取響應數據的長度,如果不能檢測到長度,則返回NSURLResponseUnknownLength(-1) 90 91 NSLog(@”響應的數據長度為: %lld”, response.expectedContentLength); 92 93 NSLog(@”響應的數據所使用的字符集: %@”, response.textEncodingName); 94 95 NSLog(@”響應的文件名: %@”, response.suggestedFilename); 96 97 } 98 99 // 每次讀取服務器響應的數據時,都會激發該方法 100 101 // 對于一個請求而言,服務器數據可能要分幾次才能讀取,因此該方法將會被處罰多次 102 103 // 如果程序需要將這些數據轉換成字符串,則建議使用NSMutableData來收集這些數據.然后整體轉換 104 105 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*) data 106 107 { 108 109 [totalData appendData:data]; 110 111 } 112 113 // 當連接服務器出現錯誤時激發該方法.可通過error獲取錯誤信息 114 115 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 116 117 { 118 119 NSLog(@”++error++”); 120 121 } 122 123 // 當數據load完成時激發該方法.對于每次請求,該方法只會被激發一次 124 125 - (void)connectionDidFinishLoading:(NSURLConnection *)connection 126 127 { 128 129 NSLog(@”++finishLoading++”); 130 131 NSString* content = [[NSString alloc] initWithData:totalData 132 133 encoding:NSUTF8StringEncoding]; 134 135 // 清空所有數據 136 137 [totalData setLength:0]; 138 139 self.showView.text = content; 140 141 } 142 143 @end

?

? 上面程序的關鍵在于紅色字代碼部分,該紅色字代碼設置了發送POST請求,而且將一個形如”name = crazyit.org&pass=瘋狂軟件”的字符串轉換成NSData后作為請求參數,并根據請求參數設置了兩個請求頭的值-----這樣就得到了一個帶請求參數的NSMutableURLRequest

轉載于:https://www.cnblogs.com/congli0220/p/5058677.html

總結

以上是生活随笔為你收集整理的iOS-----使用NSURLConnection的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美成人综合色 | 2020国产精品 | 成人字幕| 亚洲精品1| 中文字幕 自拍偷拍 | 男人av资源网 | 国产污污在线观看 | 日韩阿v | 国产夜色精品一区二区av | 手机在线看片福利 | 五月天婷婷色综合 | 黄色大片免费网站 | 一区二区三区四区在线免费观看 | 日韩精品在线观看免费 | 亚洲蜜臀av一区二区三区 | 一本久道久久 | 偷拍视频久久 | 人人爽人人爽人人片av | 天天摸日日摸狠狠添 | 美女扒开尿口来摸 | 久久综合精品视频 | 爱爱色图 | 少妇精品久久久久久久久久 | 桃色在线视频 | 91亚洲视频在线 | 欧美极品jizzhd欧美爆 | 深夜视频在线观看 | 久久人人插 | 韩国成人免费视频 | 婷婷的五月 | 免费二区 | 亚州av在线 | 青青草手机在线 | 综合久草| 亚洲熟乱 | 国产在线精品一区 | 免费黄色片子 | 日韩美一级片 | 波多野结衣在线免费观看视频 | 亚洲女则毛耸耸bbw 边吃奶边添下面好爽 | 日本少妇激三级做爰在线 | 国产成人精品免费看视频 | 国产在线观看免费播放 | 欧美精品在欧美一区二区少妇 | 国产对白视频 | 日韩一级不卡 | 免费看污的网站 | 国产精品亚洲一区二区无码 | 国产一二三在线观看 | 免费黄色高清视频 | 五月婷婷综合在线观看 | 国产精欧美一区二区三区蓝颜男同 | 国产精品久久久久久人妻精品动漫 | 91精品专区 | 成人国产| 大陆女明星乱淫合集 | 天天插综合| 超碰在线亚洲 | 永久av在线免费观看 | 久久久久免费视频 | 91精品国产一区二区 | 五月天国产视频 | 亚色在线视频 | 日韩一区二 | 粉嫩av网站 | 亚洲国产日韩一区无码精品久久久 | 丝袜诱惑一区 | 自拍色图 | 91免费福利视频 | 麻豆成人91精品二区三区 | 丰满少妇高潮一区二区 | 成人黄色免费在线观看 | 成年人看的黄色片 | 激情狠狠 | 樱桃av | 久久精品国产熟女亚洲AV麻豆 | 中文字幕无码毛片免费看 | 男女免费观看视频 | 未满十八岁勿进 | 国产精品一区二区电影 | 樱桃视频一区二区三区 | 国产精品毛片一区 | 亚洲天堂av免费在线观看 | 午夜影院福利社 | 日韩电影在线一区 | 在线免费观看成年人视频 | 国产主播精品 | 久久中文字幕在线观看 | 国产成人精品一区二区三区无码熬 | 欧洲性生活片 | 欧美浓毛大泬视频 | 亚洲国产一区二区三区在线观看 | 免看一级片 | 射射av | 丁香花电影免费播放电影 | av手机在线免费观看 | 国产女人高潮毛片 | 国产h自拍 | 一本亚洲 |