NSURLConnection(iOS2.0-iOS9.0)简单介绍

Posted 小课桌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSURLConnection(iOS2.0-iOS9.0)简单介绍相关的知识,希望对你有一定的参考价值。

 NSURLConnection使用的四个步骤:

 1、准备URL - NSURL

 2、创建请求 - NSRequest

 3、发送请求(包括异步和同步)

 4、回调

 1     // 创建请求的4种方式:
 2     // MARK: - 方案一:创建请求对象(默认请求时长60s)
 3     // NSURLRequest *request = [NSURLRequest requestWithURL:url];
 4     
 5     // MARK: - 方案二:创建请求对象同时设置缓存策略和超时时长
 6     /*
 7      cachePolicy:
 8      NSURLRequestUseProtocolCachePolicy = 0, 使用http默认的缓存策略
 9      
10      NSURLRequestReloadIgnoringLocalCacheData = 1, 只加载最新的网络数据(股票)
11      
12      NSURLRequestReturnCacheDataElseLoad = 2, 先加载缓存,后加载网络数据
13      
14      NSURLRequestReturnCacheDataDontLoad = 3, 只加载缓存数据(离线应用:离线地图、离线视频)
15      */
16     // NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:15];
17     
18     // MARK: - 方案三:使用NSMutableURLRequest:可以修改请求方法(默认是GET,可以改为POST)
19     NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url];
20     // requestM.HTTPMethod = @"POST"; // 修改为POST请求
21     // 额外设置请求头信息,只有可变的(NSMutableURLRequest)才能修改
22     [requestM setValue:@"iPhone AppleWebKit" forHTTPHeaderField:@"User-Agent"];
23     
24     // MARK: - 方案四:和方案二相似,在方案三的基础上加缓存策略和超时时长
25     NSMutableURLRequest *requestM2 = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:15];
1         // NSURLResponse介绍:
2         // 1、MIMEType:服务器上的文件类型(等价响应头里面的Content-Type)
3         // 2、expectedContentLength:文件在服务器上的总大小(下载进度计算时使用)
4         // 3、suggestedFilename:文件下载下来后,保存时命名的
5         // 子类NSHTTPURLResponse:
6         // statusCode:状态码,200表示成功,304未修改,表示从缓存中读

下面上一个完整的小demo,使用NSURLConnection加载百度,并使用WebView进行展示:

 1 #import "ViewController.h"
 2 
 3 /*
 4  NSURLConnection使用四步骤:
 5  1、准备URL - NSURL
 6  2、创建请求 - NSRequest
 7  3、发送请求(包括异步和同步)
 8  4、回调
 9  */
10 
11 @interface ViewController ()
12 
13 @property (weak, nonatomic) IBOutlet UIWebView *webView;
14 
15 @end
16 
17 @implementation ViewController
18 
19 - (void)viewDidLoad {
20     [super viewDidLoad];
21     [self loadData];
22 }
23 
24 
25 - (void)loadData{
26     // 准备URL
27     NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
28     
29     // MARK: - 方案一:创建请求对象(默认请求时长60s)
30     // NSURLRequest *request = [NSURLRequest requestWithURL:url];
31     
32     // MARK: - 方案二:创建请求对象同时设置缓存策略和超时时长
33     /*
34      cachePolicy:
35      NSURLRequestUseProtocolCachePolicy = 0, 使用http默认的缓存策略
36      
37      NSURLRequestReloadIgnoringLocalCacheData = 1, 只加载最新的网络数据(股票)
38      
39      NSURLRequestReturnCacheDataElseLoad = 2, 先加载缓存,后加载网络数据
40      
41      NSURLRequestReturnCacheDataDontLoad = 3, 只加载缓存数据(离线应用:离线地图、离线视频)
42      */
43     // NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:15];
44     
45     // MARK: - 方案三:使用NSMutableURLRequest:可以修改请求方法(默认是GET,可以改为POST)
46     NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url];
47     // requestM.HTTPMethod = @"POST"; // 修改为POST请求
48     // 额外设置请求头信息,只有可变的(NSMutableURLRequest)才能修改
49     [requestM setValue:@"iPhone AppleWebKit" forHTTPHeaderField:@"User-Agent"];
50     
51     // MARK: - 方案四:和方案二相似,在方案三的基础上加缓存策略和超时时长
52     NSMutableURLRequest *requestM2 = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:15];
53     
54     // 参数1:请求对象
55     // 参数2:回调队列
56     // 参数3:完成回调
57     [NSURLConnection sendAsynchronousRequest:requestM queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
58         // response:响应头
59         // data:响应体(二进制)
60         // connectionError:错误信息
61         
62         // NSURLResponse介绍:
63         // 1、MIMEType:服务器上的文件类型(等价响应头里面的Content-Type)
64         // 2、expectedContentLength:文件在服务器上的总大小(下载进度计算时使用)
65         // 3、suggestedFilename:文件下载下来后,保存时命名的
66         // 子类NSHTTPURLResponse:
67         // statusCode:状态码,200表示成功,304未修改,表示从缓存中读
68         
69         // MARK: - 判断错误方式一
70         /*
71          if (connectionError != nil){
72          NSLog(@"网络请求出错:%@",connectionError);
73          return;
74          }
75          NSHTTPURLResponse *httpURLResponse = (NSHTTPURLResponse *)response;
76          if (httpURLResponse.statusCode == 200 || httpURLResponse.statusCode == 304){
77          NSLog(@"响应头:%@",response);
78          NSLog(@"响应体:%@",data);
79          NSString *htmlStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
80          
81          [self.webView loadHTMLString:htmlStr baseURL:url];
82          }
83          */
84         // MARK: - 判断错误方式二
85         if (connectionError == nil && data != nil){
86             NSLog(@"响应头:%@",response);
87             NSLog(@"响应体:%@",data);
88             NSString *htmlStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
89             
90             [self.webView loadHTMLString:htmlStr baseURL:url];
91         } else{
92             NSLog(@"网络请求出错:%@",connectionError);
93         }
94     }];
95 }
96 
97 @end

 

以上是关于NSURLConnection(iOS2.0-iOS9.0)简单介绍的主要内容,如果未能解决你的问题,请参考以下文章

NSURLConnection的使用

iOS网络开发使用NSURLConnection

在同步调用上强制 NSUrlConnection 超时

NSURLSession与NSURLConnection区别

NSURLConnection 挂起

NSURLConnection使用