NSURLConnection网络处理和NSURLSession网络处理

 1 #import "ViewController.h"
 2
 3 @interface ViewController ()<NSURLConnectionDataDelegate>
 4 @property (nonatomic,strong) NSMutableData *receiveData;
 5 @end
 6
 7 @implementation ViewController
 8 //getter方法
 9 -(NSMutableData *)receiveData
10 {
11     if (_receiveData == nil) {
12         _receiveData = [NSMutableData data];
13     }
14     return _receiveData;
15 }
16 - (void)viewDidLoad {
17     [super viewDidLoad];
18 //    //创建URL对象
19 //    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/s?wd=wtb"];
20 //    NSLog(@"%@",url);
21 //    //协议
22 //    NSLog(@"scheme:%@",url.scheme);
23 //    //域名
24 //    NSLog(@"HOST:%@",url.host);
25 //    //Query查询语句,是问号之后的语句
26 //    NSLog(@"query:%@",url.query);
27 //    //Path路径
28 //    NSLog(@"path:%@",url.path);
29 //
30 //    //创建
31 //    NSURLRequest *request = [NSURLRequest requestWithURL:url];
32     //使用网络链接类NSURLConnection发送网络请求
33
34     //同步的网络请求
35 //   NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
36 //    NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
37 //
38 //    NSURLRequest *request1 = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
39
40     //创建url对象
41     NSURL *url2 = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20151101&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"];
42     //创建NSURLRequest对象
43     NSURLRequest *request2 = [NSURLRequest requestWithURL:url2];
44     //使用NSURLConnection网络连接器发送异步代理请求
45 //    [NSURLConnection connectionWithRequest:request2 delegate:self];
46
47     //异步Block请求,使用Block的时候,代理不起作用,二者只能存在其一,但是session可以,session只有异步,没有同步
48     [NSURLConnection sendAsynchronousRequest:request2 queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
49         NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
50         NSLog(@"%@",str);
51     }];
52
53
54 }
55 //开始发送请求
56 -(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
57 {
58     return request;
59 }
60 //接收到服务器响应Response
61 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
62 {
63     NSLog(@"接受的响应:%@",response);
64     //HTTPResponse
65     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
66     long long length = [httpResponse expectedContentLength];
67     NSLog(@"%lld",length);
68 }
69 //接收到data
70 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
71 {
72     [self.receiveData appendData:data];
73     NSLog(@"%ld",data.length);
74 }
75 //接收数据完成
76 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
77 {
78     NSLog(@"接收完成");
79     NSString *str = [[NSString alloc] initWithData:self.receiveData encoding:NSUTF8StringEncoding];
80     NSLog(@"%@",str);
81 }
82
83 //请求出错
84 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
85
86 {
87     NSLog(@"请求出错");
88
89 }
90 - (void)didReceiveMemoryWarning {
91     [super didReceiveMemoryWarning];
92     // Dispose of any resources that can be recreated.
93 }
94
95 @end

2.NSURLSession网络处理

 1 #import "ViewController.h"
 2
 3 @interface ViewController ()<NSURLSessionDataDelegate>
 4
 5 @end
 6
 7 @implementation ViewController
 8
 9 - (void)viewDidLoad {
10     [super viewDidLoad];
11     //由于浏览器不支持中文,所以要进行汉字转码
12     NSString *str = @"http://www.baidu.com/s?wd=滑板鞋";
13     NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:str]];
14     NSURL *url = [NSURL URLWithString:result];
15
16     //创建request
17     NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
18 //    //异步block请求
19 //    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
20 //        NSLog(@"%@",data);
21 //        NSLog(@"%@",connectionError);
22 //    }];
23
24     //创建数据请求任务
25 //    NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
26 //        NSLog(@"%@",error);
27 //    }];
28 //    //恢复请求任务
29 //    [dataTask resume];
30
31     //创建一个POST请求
32     NSURL *url2= [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
33     //创建请求request
34     NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url2];
35     //设置请求方式为POST,添加body体
36     mRequest.HTTPMethod = @"POST";
37     mRequest.HTTPBody = [@"date=20151101&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213" dataUsingEncoding:NSUTF8StringEncoding];
38     //
39 //    NSURLSessionDataTask *postDataTask = [[NSURLSession sharedSession] dataTaskWithRequest:mRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
40 //        NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
41 //        NSLog(@"%@",str);
42 //    }];
43 //    [postDataTask resume];
44
45
46
47     //使用NSURLSessionDataDelegate
48     NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
49 //    //创建数据请求任务
50
51     //1.block
52 //    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:mRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
53 //        NSLog(@"%@",data);
54 //    }];
55 //    //
56 //    [dataTask resume];
57
58     //2.代理
59     NSURLSessionDataTask *dataTask =[session dataTaskWithRequest:mRequest];
60     [dataTask resume];
61
62 }
63 //接收服务器响应
64 -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
65 {
66     NSLog(@"接收到服务器响应");
67     //允许服务器继续发送数据
68     completionHandler(NSURLSessionResponseAllow);
69 }
70 //接收到数据
71 -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
72 {
73     NSLog(@"%ld",data.length);
74 }
75 //接收数据完成
76 -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
77
78 {
79     NSLog(@"接收数据完成");
80
81 }
82
83 - (void)didReceiveMemoryWarning {
84     [super didReceiveMemoryWarning];
85     // Dispose of any resources that can be recreated.
86 }
时间: 2024-08-25 08:31:19

NSURLConnection网络处理和NSURLSession网络处理的相关文章

[Python]网络爬虫(三):异常的处理和HTTP状态码的分类(转)

先来说一说HTTP的异常处理问题.当urlopen不能够处理一个response时,产生urlError.不过通常的Python APIs异常如ValueError,TypeError等也会同时产生.HTTPError是urlError的子类,通常在特定HTTP URLs中产生. 1.URLError通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生. 这种情况下,异常同样会带有"reason"属性,它是一个tuple(可以理解为不可变的数组),

IOS网络访问之NSURLSession

NSURLSession是IOS7中新添加的网络访问接口,作用与NSURLConnection一致,在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.如果用户强制将程序关闭,NSURLSession会断掉. NSURLSession中关键类有下面几种 1:NSURLSessionConfiguration:用于配置NSURLSession工作模式以及网络设置 工作模式分为下面三种: 普通模式(default):可以使用缓存 + (NSURLSessionC

iOS网络编程(六) NSURLSession详解

昨夜浏览Demo的时候,看到别人请求网络数据用的是NSURLSession,当时就在想这里什么,怎么没有用过,引起了我的好奇心,遂去百度-谷歌-官方文档一一查看,有了一定的了解,原来NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的. 查找资料,写了一个小Demo,大家可以看看,有什么不足的地方,可以留言帮我指出来. // // HMTRootViewController.m // // // Created by HMT on 14-6-7.

介绍NSURLSession网络请求套件

昨天翻译了一篇<NSURLSession的使用>的文章,地址:http://www.cnblogs.com/JackieHoo/p/4995733.html,原文是来自苹果官方介绍NSURLSession技术实现网络请求的原理文章,文章中提到NSURLSession网络请求技术是NSURLSession这个新类和它相关类的套件集合.今天这篇文章,我就重点介绍下NSURLSession套件的几个重要类. 首先我们看看下面这张图: 从图中可以看出NSURLSession主要由NSURLSessio

网络管理和nmcli命令的使用——网络接口配置-bonding实验步骤

(实验)网络接口配置-bonding ? Bonding 将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡.直接给两块网卡设置同\一IP地址是不可以的.通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址. 实验步骤: 多网卡绑定bondign(Mode 1 active-backup,主备策略) 1.新建一个网卡配置文件ifcfg-bond0 DEVICE=bond0 IPADDR=192.168.99.110(共用的ip地址) PREFIX=24

自动化无人值守网络装机(PXE网络装机)

自动化无人值守网络装机(PXE网络装机) 在IP地址为192.168.4.5主机上配置pxe机,实现对客户端的自动化网络装机,并在给客户端装机后自动分配IP地址.主机名,并自动创建一个管理员的账户:admin和对应密码:123456. 在192.168.4.5主机上配置: [[email protected]桌面]# mkdir  /nfsdir [[email protected]/]# mount  /dev/cdrom  /nfsdir //光盘挂载目录,也可是其他目录,但要和生成ks文件

VXLAN, 一种叠加在L3网络上的L2网络

这几天看了下RFC7348,顺便翻译了一下,根据自己理解做了注解 虚拟化及租户隔离 服务器虚拟化增加了对物理网络基础设施的需求,服务器有多个虚机,要求交换机支持更大的MAC地址表. 在数据中心场景下,虚机按照VLAN分组,可能需要成千上万的VLAN,以便用来给为按照VLAN标签分组的虚机分隔流量.但是当前VLAN机制限制最多只能有4096个VLAN. 数据中心需要支持多个租户,每个租户需要分隔的网络域,单独实现分离的网络域不经济.管理员一般基于共享网络进行隔离.各租户独立进行VM的MAC和VLA

linux下网络排错以及查看网络信息命令

ping命令利用icmp协议(echorequest----echo reply包)来实现 选项 -c 次数  指定ping几次后退出 -W 时间  指定最大等待时间 注:如有大量ping请求发到本主机,会影响本机其他网络服务. ping输出详解 rtt:请求报文的响应时间 报错信息:timeout关键字:原因有2种:1,无此主机 2,对方主机不响应 目标主机不可达:这个去查rfc文档(学习网络协议的好方法就是看rfc文档),有中文版的! 判断主机是否在线的脚本: 1) for .. in ..

2018-4-17Linux系统管理(18)(19)网络配置命令及网络配置文件

在前面的章节当中我们讲述了计算网络通信的基础知识,介绍网络的拓扑结构类型及对于Linux来说的网络属性如何进行相关配置,而后有介绍了TCP/IP的协议栈,而这个协议栈是计算机真正使用的协议栈,以分层的概念将复杂问题进行切割,每层都有其相关的协议,都能够独立且相互调用可以协作完成.该协议栈共有四层,分别为物理层.互联网层.传输层及应用层进行组合.而对于底层来讲,作为运维的话我们无需掌握很多,不过我们也必须稍微进行一个了解,比如在互联网层中最为最重要的协议是IP协议,而在传输层中最为重要的协议为TC