服务器也会配置并返回对应的证书链Certificate,用于身份验证与密钥交换。然后会发送ServerHelloDone信息用于通知服务器信息发送结束。...二是数据传输过程:身份验证通过并协商好密钥后,通信双方使用协商好的密钥加密数据并进行通信。...如下图所示: 针对非自签名证书验证实现 在接收到服务器返回的状态码为401的响应后,对于NSURLSession而言,需要代理对象实现URLSession:task:didReceiveChallenge...NSURLCredential 表示身份验证证书。...因此NSURLCredential可以表示由用户名/密码组合、客户端证书及服务器信任创建的认证信息,适合大部分的认证请求。
正文 本文的目的:一是简要分析下对服务器身份验证的完整握手过程,二是证书链的验证,三是探索下iOS中原生库NSURLConnection或NSURLSession如何支持实现https。...TLS记录协议建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。...下面以登录qq邮箱为例,通过Wireshark抓包可以看到如下图: ?...NSURLCredential 表示身份验证证书。...因此NSURLCredential可以表示由用户名/密码组合、客户端证书及服务器信任创建的认证信息,适合大部分的认证请求。
从iOS9开始,NSURLConnection中发送请求的两个方法已经过期(同步请求,异步请求),初始化网络连接的方法也被设置为过期,系统不再推荐使用,建议使用NSURLSession发送网络请求。...创建的task都是挂起状态,需要resume才能启动。 当服务器返回的数据较小时,NSURLSession与NSURLConnection执行普通任务的操作步骤没有区别。...NSURLConnection不能进行这个配置,相比较与NSURLConnection依赖与一个全局的配置对象,缺乏灵活性而言,NSURLSession有很大的改进了。...干货开始 NSURLSession NSURLSession 为 HTTP 数据传输提供一系列的接口,而使用 NSURLSession 总共只需要三步: 创建NSURLSession对象 通过 NSURLSession... * 无法修改默认的连接行为 * 身份验证的能力有限 * 任务在后台时无法上传和下载 */ + (NSURLSession *)sharedSession; 2.自定义 Session 对象 /
我们需要做如下几步: 在接受到响应的时候,即在didReceiveResponse中创建一个空的沙盒文件,并且创建一个NSFilehandle类。...或者通过NSFilehandle的- (unsigned long long)seekToEndOfFile;方法,直接制定文件的写入位置为文件末尾。...Range请求头的格式为: Range: bytes=start-end 例如: Range: bytes=10-:表示第10个字节及最后个字节的数据。...所以我们需要做的步骤为: 添加需要实现断点下载的[开始/暂停]按钮。 设置一个NSURLConnection的全局变量。...如果继续下载,设置HTTP请求头的Range为当前已下载文件的长度位置到最后文件末尾位置。然后创建一个NSURLConnection发送异步下载,并监听代理方法。
."); return NO; } 首先看一下判断条件,如果域名存在,且允许自建证书,且需要验证域名,且SSLPinningMode模式为AFSSLPinningModeNone或者添加到项目中的证书数量为...如果需要验证domain,那么就使用SecPolicyCreateSSL函数创建验证策略,其中第一个参数为true表示验证整个SSL证书链,第二个参数传入domain,用于判断整个证书链上叶子节点表示的那个...使用certificatesInBundle从你的目标加载证书,然后通过调用policyWithPinningMode:withPinnedCertificates来创建一个新的策略。...bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)]; } 把证书数据,用系统返回类型为SecCertificateRef...; } //完成挑战 if (completionHandler) { completionHandler(disposition
我们在用NSURLConnection或者NSURLSession进行HTTP请求时,有些URL因为需要授权认证而返回401,因此客户端需要在HTTP的请求头中带上用户和密码进行授权认证(具体查看这里)...我们称这些情况为服务端要求客户端接收认证挑战(AuthenticationChallenge)。...当我们使用NSURLConnection来请求需要挑战的页面的时delegate会先调用协议函数: (void)connection:(NSURLConnection*)connectionwillSendRequestForAuthenticationChallenge...cancelAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge; @end 我们再来捋顺一下逻辑,当我们发送请求到服务端时,服务端需要我们挑战时会在客户端创建一个挑战对象...,如果有凭证对象则会把凭证对象赋值给数据成员proposedCredential,建立挑战对象后判断当前有没有实现NSURLConnection的willSendRequestForAuthenticationChallenge
简单理解,这个参数就是服务端发起的一个验证挑战,客户端需要根据挑战的类型提供相应的挑战凭证。...当然,挑战凭证不一定都是进行HTTPS证书的信任,也可能是需要客户端提供用户密码或者提供双向验证时的客户端证书。当这个挑战凭证被验证通过时,请求便可以继续顺利进行。...这个类可以简单理解为客户端创建的凭证信息,解析如下: //通过用户名和密码进行凭证的创建 - (instancetype)initWithUser:(NSString *)user password:(...APPID设备共享 }; 三、使用AFNetworking进行自签名证书HTTPS请求的认证 使用AFNetworking也可以很方便的进行自签名证书的认证,还以上一节博客搭建的HTTPS环境为例...NSArray *cerArray = @[caCert]; _manager.securityPolicy.pinnedCertificates = cerArray; SecCertificateRef
pragma mark 实现方法 /** * 接收到响应的时候:创建一个空的沙盒文件 */ - (void)connection:(NSURLConnection...现在的苹果原生网络框架 -- NSURLSession 在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作...),GET请求参数直接跟在URL后面 2)创建请求对象(默认包含了请求头和请求方法【GET】),此步骤可以省略 3)创建会话对象(NSURLSession) 4)根据会话对象创建请求任务(NSURLSessionDataTask...,并把参数转换为二进制数据设置为请求体 //1.创建会话对象 NSURLSession *session = [NSURLSession sharedSession];...//4.修改请求方法为POST request.HTTPMethod = @"POST"; //5.设置请求体 request.HTTPBody = [@"username
NSURLConnection的使用 使用NSURLConnection发送请求的步骤很简单 创建一个NSURL对象,设置请求路径 NSURL:请求地址 传入NSURL创建一个NSURLRequest...NSURLConnection发送请求 2.1 创建NSURLRequest ?...创建NSURLRequest NSURLRequest默认的请求方法是GET,当我们需要修改请求方法为POST的时候就要用可变的NSMutableURLRequest,并设置请求方式,请求头和请求体。...答案是可以的但是需要注意,initWithRequest会将方法会将NSURLConnection对象加入当前对应的RunLoop中,当我们在子线程中进行网络请求,默认子线程的RunLoop不会自动创建...NSURLConnection 文件上传 文件上传步骤 确定请求路径 根据URL创建一个可变的请求对象 设置请求对象,修改请求方式为POST 设置请求头,告诉服务器我们将要上传文件(Content-Type
iOS之网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍IOS中如何利用NSURLconnection从网络上下载数据以及如何解析下载下来的JSON数据格式,以及如何显示数据和托图片的异步下载显示...NSURLconnection异步下载和封装 2.JSON格式和JSON格式解析 3....Server服务端: 为客户端提供数据, 提供服务。 ...2.利用NSURLConnection异步下载数据。 3.通过解析数据,建立数据模型model。 ...(NSJSONReadingOptions) error:(NSError *__autoreleasing *) 4.一个完整界面的实现(包含Model创建
刚开始,我查阅了老版本的SDWebImage,发现NSURLConnection虽然会开几个新的子线程,但它的回调是工作在主线程,并指定创建时当前线程的工作mode为defaultMode,这时候,子线程如果真有...waitUntilDone参数解释: 当为YES,先让主线程运行selector中的一些操作,之后再进行当前线程中的操作。...当为NO,先进行当前线程中的操作,之后让主线程运行selector中的一些操作。 1....)会新开一个线程,NSURLConnection也再创建了两个新的子线程,但是最终的网络请求的回调(即最终的setImage部分)工作在主线程。...sharedSession]; // 创建下载任务,其中location为下载的临时文件路径 NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL
本文将访问网易云音乐为案例,介绍如何使用JDAudioCrawler这个强大的工具,将音频数据存储下载到本地存储中。将详细介绍实现的流程和代码细节。...;NSString *proxyPort = @"5445";NSString *proxyUser = @"16QMSOML";NSString *proxyPass = @"280651";// 创建...*)connection didReceiveResponse:(NSURLResponse *)response;- (void)connection:(NSURLConnection *)connection...didReceiveData:(NSData *)data;- (void)connectionDidFinishLoading:(NSURLConnection *)connection;@end@...*)connection { // 创建AudioFilter对象 AudioFilter *audioFilter = [[AudioFilter alloc] init];
}); } /** * 使用NSMutableURLRequest向服务器发送POST请求获取数据 */ - (void)getDataThree:(id)sender{ //创建一个线程...//在block中从网络获取数据 NSString *str = @"http://php.weather.sina.com.cn/xml.php"; //创建...,获得key为weatherinfo的字典 NSDictionary *dic2 = [dic objectForKey:@"weatherinfo"];...NSXMLParseDelegate代理类中有一组方法用来检测文档的读取状态,例如,文档开始、文档结束、元素开始、元素结束、内容开始等; 解析XML数据的基本思路是,在元素开始时创建一个空对象,找到内容时...示例代码: //创建一个Customer类 @interface Customer : NSObject @property (nonatomic, assign) int cid; //客户id
您必须启动自己的对话框以供用户进行身份验证,或者必须将凭据存储在客户端设备上--HTTP Live Streaming不提供用于身份验证的用户对话框。...如果您正在编写自己的客户端应用程序,则可以存储凭据,无论是基于Cookie还是基于HTTP摘要,并在didReceiveAuthenticationChallenge回调中提供凭据(请参阅使用NSURLConnection...和身份验证挑战和TLS链验证以了解详细信息)。
这些回调会被 RunLoop 创建好的 AutoreleasePool 环绕着,所以不会出现内存泄漏,开发者也不必显示创建 Pool 了。...4、事件响应 苹果注册了一个 Source1 (基于 mach port 的) 用来接收系统事件,其回调函数为 __IOHIDEventSystemClientQueueCallback()。...• NSURLSession 是 iOS7 中新增的接口,表面上是和 NSURLConnection 并列的,但底层仍然用到了 NSURLConnection 的部分功能 (比如com.apple.NSURLConnectionLoader...下面主要介绍下 NSURLConnection 的工作过程。...当开始网络传输时,我们可以看到 NSURLConnection 创建了两个新线程:com.apple.NSURLConnectionLoader 和 com.apple.CFSocket.private
30.runloop的自动释放池什么时候创建释放? 31.请简单说明使用NSURLConnection发送网络请求的几种方法? 32.请简单说明GET请求和POST个请求有什么区别,如何选择?...确定请求路径(URL) 创建可变的请求对象(NSMutableURLRequest) 修改请求方法为POST请求 把参数拼接起来转换为二进制数据,设置请求体 使用NSURLConnection发送异步请求...确定请求路径(NSURL) 创建可变的请求对象(NSMutableURLRequest) 修改请求方法为POST(HTTPMethod) 把要传递的参数拼接,转换为二进制数据,设置为请求体(HTTPBody...确定上传请求的路径 (NSURL) 创建可变的请求对象(NSMutableURLRequest) 修改请求方法为POST 设置请求头信息(告知服务器端这是一个文件上传请求) 按照固定的格式拼接要上传的文件等参数...创建可变的请求对象,因为需要修改请求方法为POST,设置请求头信息 设置请求头这个步骤可能会被遗漏 要处理上传参数的时候,一定要按照固定的格式来进行拼接 需要采用合适的方法来获得上传文件的二进制数据类型
在 2013 的 WWDC 上,苹果推出了 NSURLConnection 的继任者:NSURLSession。...为下载的临时文件路径 NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:url completionHandler...其中NSURLSessionConfiguration为默认配置 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration...这样,我们就可以像NSURLConnection上边那样,创建一个NSFilehandle(文件句柄)类,在接受数据的时候,一点点写入永久沙盒文件中。...相关文章链接:iOS网络--『文件下载、断点下载』(一):NSURLConnection。
版权声明:本文为博主原创文章,未经博主允许不得转载。...在AF2.x的时候AF是基于NSURLConnection和新的NSURLSession进行封装的,在NSURLConnection被苹果弃用之后,AF就开始专门基于NSURLSession进行封装了。..._network =NO; }else{ NSLog(@"有网络"); _network =YES; } }]; } 在将HttpTool创建为单例的时候就调用了
Run loops是线程的基础架构部分, Cocoa 和 CoreFundation 都提供了 run loop 对象方便配置和管理线程的 run loop (以下都以 Cocoa 为例)。...(1)User Experience,这个一般可以理解为Application. (2)Application Frameworks,这个理解为主要包括像Cocoa这样的组件。...下面主要介绍下 NSURLConnection 的工作过程。...当开始网络传输时,我们可以看到 NSURLConnection 创建了两个新线程:com.apple.NSURLConnectionLoader 和 com.apple.CFSocket.private...为此 AFNetworking 单独创建了一个线程,并在这个线程中启动了一个 RunLoop: 使用NSOperation+NSURLConnection并发模型都会面临NSURLConnection下载完成前线程退出导致
RunLoop 的适用场景 回顾一下上一篇文章的介绍,只有当你为你的应用创建子线程时,才可能需要显式的运行一个 RunLoop 。而主线程的 RunLoop 是自动启动循环。...这些回调会被 RunLoop 创建好的 AutoreleasePool 环绕着,所以不会出现内存泄漏,开发者也不必显示创建 Pool 了。...• NSURLSession 是 iOS7 中新增的接口,表面上是和 NSURLConnection 并列的,但底层仍然用到了 NSURLConnection 的部分功能 (比如 com.apple.NSURLConnectionLoader...当开始网络传输时,我们可以看到 NSURLConnection 创建了两个新线程:com.apple.NSURLConnectionLoader 和 com.apple.CFSocket.private...一个Demo 根据上面对NSURLConnection的介绍,我们模拟一个类似的设计来实现通过RunLoop来等待和处理事件。 第一步:创建任务线程 创建子线程,用于初始化一个接收自定义事件源。
领取专属 10元无门槛券
手把手带您无忧上云