zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    力扣算法题—091解码
    力扣算法题—090子集2
    力扣算法题—089格雷编码
    力扣算法题—088合并两个有序数组
    HDU 1509 Windows Message Queue
    HDU 1241 Oil Deposits
    HDU 1096 A+B for Input-Output Practice (VIII)
    HDU 1108 最小公倍数
    HDU 1106 排序
    HDU 1003 Max Sum * 最长递增子序列(求序列累加最大值)
  • 原文地址:https://www.cnblogs.com/panda1024/p/6279155.html
Copyright © 2011-2022 走看看