网络请求相关小结2

1 NSURLConnettion

NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一个抽象. NSURLConnettion是用来指代 Foundation 框架中的一系列组件: NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage 以及同名类 NSURLConnection.

注1:原来的使用原理:一个 NSURLRequest 发送给 NSURLConnect.被委托对象(遵守 NSURLConnectionDeledate 和 NSURLConnectionDataDeledate 非正式协议)异步返回一个 NSURLResponce 和服务器的 NSData.

注2:在一个请求发送给服务器的时候,系统会先查询缓存信息,然后根据策略和可用写的不同,当在缓存中找到响应则直接返回.否则,系统将根据我们的策略,将接到请求后的响应缓存到并返回.

注3:在把请求发送给服务器的时候,服务器会发出鉴权查询,这可以有共享的 cookie 或者机密存储来自动响应,或者由被委托的对象来响应.发送中的请求,也可以被 NSURLProtocol 拦截,以便在必要的时候,无缝的改变其请求.

NSURLConnettion是使用步骤:

1 获取一个 URL

2 通过 URL 创建一个请求

3 用NSURLConnettion发送请求

2 NSURLSession

和 NSURLConnection 一样, NSURLSession 不仅仅包括同名的 NSURLSession, 还包括NSURLRequest 和 NSURLCache. 同时将NSURLConnection 对应为NSURLSession,NSURLSessionFiguration 以及NSURLSession 的三个子类,即NSURLSessionTask,NSURLSessionUpLoadTask 和 NSULSessionDownLoadTask.

和 NSURLConnection 相比, NSURLSession 最大的改变可以配置每一个缓存的session 缓存, cookie 值,协议以及证书策略甚至夸程序共享这些信息.这保证了程序和网络框架之间的相互独立.每一个 NSURLSession 有一个 NSURLSessionConfiguration 来进行初始化, NSURLSessionConfiguration指定了策略,以及在移动设备上增强性能的选项.

NSURLSession 的另一个特点就是 session Task, 用来处理的上传和下载.和 NSURLConnection 最大的不同之处在于,所有的 task 共享其创造者 NSURLSession.

注: NSURLSessionTask分析

NSURLSessionTask 是一个抽象类,里面包含NSURLSessionDataTask  , NSURLSessionDownLoadTask 以及 NSURLSessionUpLoadTask三个子类.这三个子类封装了网络的基本任务:获取数据,上传和下载

使用原理:当一个 NSURLSessionDataTask 完成的时候,会有一个返回的数据,一个 NSURLSessionDownLoadTask 完成的时候会带一个临时文件的路径.文件上传的时候也会返回一定的数据,所以可以说 NSURLSessionUpLoadTask 是继承于 NSURLSessionDataTask.所有的 Task 都可以取消,暂停和恢复,当暂停的时候回记录当前的位置,以便下载继续从此点继续下载.需要说明的是 NSURLSessionTask 是有 NSURLSession 创建的.

NSURLSession的使用步骤:和 NSURLConnection 基本相似,然后使用resume方法来讲它运行.

1 获取一个 URL

2 通过 URL 创建一个请求

2.1 创建一个上传的NSData(UpLoad 上传的时候用)

3 创建一个NSURLSession的单例

4 通过NSURLSession发送请求(注:使用 resume)

实例:

1 DataTask

NSURL *URL = [NSURL URLWithString:@"http://example.com"];

NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionDataTask *task = [session dataTaskWithRequest:request

completionHandler:

^(NSData *data, NSURLResponse *response, NSError *error) {

// ...

}];

[task resume];

2 UpLoadTask

NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];

NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSData *data = ...;

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request

fromData:data

completionHandler:

^(NSData *data, NSURLResponse *response, NSError *error) {

// ...

}];

[uploadTask resume];

3 DownLoadTask

注: Download task 也需要一个 request,不同之处在于 completionHandler 这个 block。Data task 和 upload task 会在任务完成时一次性返回,但是 Download task 是将数据一点点地写入本地的临时文件。所以在 completionHandler 这个 block 里,我们需要把文件从一个临时地址移动到一个永久的地址保存起来.

NSURL *URL = [NSURL URLWithString:@"http://example.com/file.zip"];

NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request

completionHandler:

^(NSURL *location, NSURLResponse *response, NSError *error) {

NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

NSURL *documentsDirectoryURL = [NSURL fileURLWithPath:documentsPath];

NSURL *newFileLocation = [documentsDirectoryURL URLByAppendingPathComponent:[[response URL] lastPathComponent]];

[[NSFileManager defaultManager] copyItemAtURL:location toURL:newFileLocation error:nil];

}];

[downloadTask resume];

3 NSURLSession 和 NSURLConnection 的区别

NSURLSession即有 session 的代理方法又有 Task 的代理方法.session 的代理方法用来处理连接层的问题(服务器的信任,客户端证书的评估等),Task 的代理方法用来处理鉴权查询和以网络请求有关的问题.

4 AFN 框架

AFN 是对 NSURLConnection 的一层封装

AFN 的主要功能:

  • NSURLConnection

AFURLConnectionOperation

AFHTTPRequestOperation

AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)

AFHTTPRequestOperationManager的属性

1 baseURL :开发者针要对 AFHTTPRequestOperationManager 自定义一个单例子类,设置 baseURL, 所有的网络访问,都只使用相对路径即可.

2 requestSerializer :请求数据格式/默认是二进制的 HTTP

3 responseSerializer :响应的数据格式/默认是 JSON 格式

4 operationQueue

5 reachabilityManager :网络连接管理器

AFHTTPRequestOperationManager方法:

1 manager :方便创建管理器的类方法

2 HTTPRequestOperationWithRequest :在访问服务器时,如果要告诉服务器一些附加信息,都需要在 Request 中设置

3 GET

4 POST

  • NSURLSession

AFURLSessionManager

AFHTTPSessionManager(封装了常用的 HTTP 方法)

1 GET

2 POST

3 UIKit+AFNetWorking分类

4 NSProgress(利用 KVO)

  • 半自动的序列化和反序列化

AFURLRequestSerialization :请求的数据格式/默认是二进制的

AFURLResponseSerialization :响应的数据格式/默认是JSON格式

  • 附加功能

1 安全策略:(HTTPS 和AFSecurityPolicy)

2 网络检测: (对链接方式进行了封装和 AFNetWorkingReachabiliManager)

使用链接: http://www.cnblogs.com/worldtraveler/p/4736643.html

AFN 的使用步骤:

1 创建一个请求操作管理者

2 声明响应结果进行 JSON,XML等数据解析,返回 Data

3 设置请求参数

4 发送请求

补充 ASI: (功能很强大,但是已经不更新了)

ASI 使用步骤:

1 获取 URL

2 获取 ASI 请求对象

3 发送请求

时间: 2024-12-21 21:56:04

网络请求相关小结2的相关文章

iOS基础之网络请求相关

1.AFNetwork二次封装方法一: #import <Foundation/Foundation.h> @interface BeeNetworkManager : NSObject /** * POST网络请求 * 每个请求都添加公共参数 */ + (void)POSTWithUrlString:(NSString *)urlString parameters:(NSMutableDictionary *)parameters success:(void (^)(id responseO

造轮子 | 怎样设计一个面向协议的 iOS 网络请求库

近期开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 须要干些啥 对于大部分 App 而言,业务层做一次网络请求通常关心的问题有例如以下几个: 怎样在任何位置发起网络请求. 表单创建. 包括请求地址.请求方式(GET/POST/--).请求头等-- 载入遮罩. 目的是堵塞 UI 交互,同一时候告知用户操作正在进行. 比方提交表单时在提交按钮上显示 "菊花",同一时候使其失效. 载入进度

造轮子 | 如何设计一个面向协议的 iOS 网络请求库

最近开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 需要干些啥 对于大部分 App 而言,业务层做一次网络请求通常关心的问题有如下几个: 如何在任意位置发起网络请求. 表单创建.包含请求地址.请求方式(GET/POST/--).请求头等-- 加载遮罩.目的是阻塞 UI 交互,同时告知用户操作正在进行.比如提交表单时在提交按钮上显示 "菊花",同时使其失效. 加载进度展示.下载上传图片

IOS 京东相关app 出现“网络请求失败,请检查您的网络设置”的解决办法

问题情况 在IOS系统下,下载安装或者更新新版的京东相关app之后,打开app直接就是“网络请求失败,请检查网络设置”,无论是数据连接还是wifi都试了,都是网络请求失败. 然而打开无线局域网-使用无线局域网与蜂窝移动的应用…却找不到手机京东这个对应的app.这是什么原因呢???!!卸载重装还是这个老样子! 解决办法 1.先进入那个“使用无线局域网与蜂窝移动的应用”的界面,随便把某个应用的的联网权限改成别的. 2.再次打开京东这个app,系统就会提示你选择联网权限,选择允许. 3.回去“使用无线

ios 网络请求总结加强对中文的处理 问题:URL不允许写中文 在GET请求中,相关代码段打断点以验证。

开发还是需要多多练习的 ,下面是一些常用的步骤: 一.简单说明 创建Get 请求 //    1.设置请求路径 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; NSURL *url=[NSURL URLWithString:urlStr]; //

网络编程学习小结

几种网络编程方式: ISAPI.CGI.WinInet.Winsock 它们之间的差别: 1)  ISAPI主要是开发基于浏览器client与server端程序.效率比CGI方式高,并且也扩展了CGI没有的一些功能.(基于TCP/IP模型中的应用层) 2)  CGI主要是开发基于浏览器client与server端程序.(基于TCP/IP模型中的应用层) 3)  WinInet主要是开发client程序.(基于TCP/IP模型中的应用层) 4)  Winsock主要是基于socket来开发clie

网络连接相关基础知识笔记

一.常说的TCP/IP的含义 TCP/IP协议簇并不仅仅指TCP协议和IP协议,实际它包括了一系列协议组成的集合,如:TCP,IP,UDP,FTP,SMTP,DNS,ARP,PPP等 TCP与UDP协议都属于传输层协议,但有很大不同,TCP是面向连接的协议,提供的是可靠的数据流服务,TCP采用"带重传的肯定确认"机制来实现传输的可靠性,实现了一种"虚电路",因为从物理上来说,并不是真正在两台主机间建立了连接,这种连接只是存在于逻辑上的.最大的开销出现在通信前建立连接

Swift网络请求(Moya篇)

在使用Alamofire进行网络请求的时候,相信大部分的同学都会封装一个抽象的NetworkLayer,如"APIManager" 或者 "NetworkModel"等等.但是位置业务功能增加,会渐渐混合各种请求,不够清晰,而Moya能很好地解决这类问题.Moya在Alamofire基础上进行封装,是一个允许高度自定义的网络层,可以根据具体的需求进行接口的设置.具体的介绍可以参考Moya的官方链接,结构图如下: 接下来就介绍一下Moya的一些常见的用法: (一)根据

Android实际开发之网络请求组件的封装(OkHttp为核心)

趁周末时间撸了两天代码,将OkHttp网络请求框架进行了一次简单封装,对于实际开发非常有用.. 此次封装主要针对我们经常使用的网络请求的步骤进行封装,在已有框架OkHttp的基础上进行实际开发的封装 发送一个网络请求,有以下三个功能模块: 一:request处理 二:OkHttp核心处理 三:callback处理 我们进行网络请求组件的封装也是根据这三大模块进行封装的,下面规划一下这次封装的一个思维导图: 根据以上思维导图,我们第一步,先进行request的封装: 以下是封装的一个CommonR