现在的苹果原生网络框架 -- NSURLSession 在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作...关系如下: 2.1 GET请求(NSURLRequest默认设置) 使用NSURLSession发送GET请求的方法和NSURLConnection类似,整个过程如下: 1)确定请求路径(一般由公司的后台开发人员以接口文档的方式提供...]; //3.根据会话对象创建一个Task(发送请求) /* 第一个参数:请求路径 第二个参数:completionHandler回调(请求完成【成功|失败...*)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { //3.当请求完成(成功|失败...AF封装了GET和POST操作的 -- AFHTTPSessionManager AFNetworking2.0和3.0区别很大,也是因为苹果废弃了NSURLConnection,而改用了NSURLSession
AFNetworking简单介绍 通过前面学习的HTTP协议的基本知识,GET/POST请求的区别,NSURLConnection 和 NSURLSession的使用,已经基本了解了网络请求的方法,但是相对使用比较麻烦...GET请求 AFHTTPSessionManager *manager =[AFHTTPSessionManager manager]; NSDictionary *dict = @{...文件上传 关于文件上传使用AFN就简单多了,也不需要我们去拼接请求体和请求文件参数啦,AFN内部已经帮我们拼接好了 方法一:formData 添加data形式数据 AFHTTPSessionManager...) { // 上传失败 NSLog(@"上传失败"); }]; 方法二:formData直接添加url AFHTTPSessionManager *manager...当使用NSURLSession来向HTTPS发送请求时,需要在NSURLSessionDataDelegate的代理方法didReceiveChallenge中,信任服务器并且创建证书返回服务器。
- ###GET请求 ```objc // 第一种GET请求 // 获得NSURLSession对象 NSURLSession *session = [NSURLSession...NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { NSLog(@"%s", __func__); } // 3.请求成功或者失败...(如果失败,error有值) -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError...---%@", error); }]; ``` ```objc // 第二种GET请求 // AFHTTPSessionManager内部包装了NSURLSession...AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager]; NSDictionary *params = @{
POST NSURLSession AFURLSessionManager AFHTTPSessionManager(封装了常用的 HTTP 方法) GET POST UIKit + AFNetworking...1.AFHTTPSessionManager 是AFN中最重要的对象之一 封装了HTTP请求的常见处理 GET\POST请求 解析服务器的响应数据 创建AFHTTPSessionManager AFHTTPSessionManager...*mgr = [AFHTTPSessionManager manager]; AFHTTPSessionManager的GET\POST请求 // GET请求 /* http://120.25.226.186...- (void)get2 { // 1.创建AFN管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];...基于NSURLSession AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 2.利用网络管理者下载数据
// AFNetworking是使用NSURLConnection 和 NSURLSession // #improt "AFNetworking.h" //1.使用 NSURLConnection...AFN即可以下载网络数据, 又可以解析json数据,如果不写下面的 自动就解析json // 由于做服务器的人返回json数据往往不规范, 凡是AFN又检查很严格,导致json解析往往失败...GET下载数据 NSDictionary *params = @{@"page" : @"2"};//表示第几页 [manager GET:urlPath parameters:params success...NSURLSession版本的AFNetworking //2.1创建一个AFN管理对象 AFHTTPSessionManager *smanager = [AFHTTPSessionManager...GET下载数据 [smanager GET:urlPath parameters:params success:^(NSURLSessionDataTask *task, id responseObject
文档翻译: AFHTTPSessionManager继承自AFURLSessionManager,提供了便捷的方法用于HTTP请求,当一个baseURL,根据相对路径,可以很方便地进行GET/POST或者其他请求...而针对iOS 6以及更早的则建议使用AFHTTPRequestOperationManager。...对象开启一个新请求的一个API // AFHTTPSessionManager.h - (nullable NSURLSessionDataTask *)GET:(NSString *)URLString...self.session则是在初始化中生成了 初始化 初始化过程中,主要是生成了一个NSURLSession并将其添加到了异步线程。...*)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error 分为error处理和成功完成请求,如果对请求处理有提前设置异步线程
你要知道的NSURLSession都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本系列文章主要讲解iOS中网络请求类NSURLSession...的使用方法进行详解,同时也会以此为扩展,讲解SDWebImage中图片下载功能的源码分析,讲解AFNetworking相关源码分析。...,只需要传入要下载文件的NSURL对象,在传入几个回调块就能将文件下载到指定的目录中,并且可以监控下载进度,真的很方便,但NSURLSessionDataTask创建的任务默认是GET请求,如果需要其他如...} return nil; } //序列化成功,调用父类的方法获取dataTask __block NSURLSessionDataTask *dataTask...通过AFURLSessionManager和AFHTTPSessionManager源码的阅读可以学习到AFNetworking在代码设计方面的优点,以及对NSURLSession的使用更清晰了。
于是找了一下,现在都用的是NSURLSession了,AFN中用的是AFHTTPSessionManager了~~ GET请求 AFHTTPSessionManager *manager = [AFHTTPSessionManager...manager]; [manager GET:URL parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {...NSError * _Nonnull error) { //请求失败 WKNSLog(@"请求失败:%@",error); }]; } //第二种是通过URL...NSError * _Nonnull error) { //请求失败 WKNSLog(@"请求失败:%@",error); }]; } 监测当前网络状态(网络监听...WiFi网络"); break; default: break; } }] ; } 使用中遇到的一些问题
框架体系 1.1 NSURLSession AFURLSessionManager AFHTTPSessionManager 1.2 序列化 ...使用方法 2.1 AFURLSessionManager AFURLSessionManager用于,基于一个指定的NSURLSessionConfiguration对象,创建和管理NSURLSession...您可以使用可达性来决定,何时应自动重试请求。 可达性通知(连接可用)是发起重试时间的好时机,虽然它可能仍然失败。 网络可达性,是确定请求可能失败原因的一个有用工具。...在网络请求失败之后,告诉他们离线的用户比给予他们一个更为技术性但准确的错误,比如“请求超时”。 另见WWDC 2012会议706“网络最佳实践”。...2.4.1 允许无效的SSL证书 AFHTTPSessionManager * manager = [AFHTTPSessionManager manager ]; manager.securityPolicy.allowInvalidCertificates
任务T和任务T'的关系 再不明白请看实例: 例如以下情况:使用线程组异步并发执行两个AFN网络请求,然后网络请求不管成功或失败都会各自回调主线程去执行success或者failure的block中的任务...*manager = [AFHTTPSessionManager manager]; [manager GET:urlString_1 parameters:dictionary...}]; // 在网络请求任务成功/失败之前,一直等待信号量(相当于阻塞,不会执行下面的操作) dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER...}]; // 在网络请求任务成功/失败之前,一直等待信号量(相当于阻塞,不会执行下面的操作) dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER...- (NSString *)getSSOToken { NSURLSession *session = [NSURLSession sharedSession]; NSString *accessToken
他主要实现了NSURLSession和NSRULSessionTask的封装。...(这里进行了一层简单的封装) +(AFHTTPSessionManager *)httpManager{ // 获取请求对象 AFHTTPSessionManager *manager...AFHTTPSessionManager中一共提供了四种初始化方法,但最终都会指向调用- (instancetype)initWithBaseURL:(NSURL *)url sessionConfiguration...nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure方法 进入该方法查看实现,发现除了常用的POST和GET...使用AFN传入的参数格式为字典,但在网络请求中,是要转换成key=value&key=value的形式(GET请求直接拼接到URL之后,POST请求放入request body中),才能传给服务端获取有效的数据
于是找了一下,现在都用的是NSURLSession了,AFNetworking中用的是AFHTTPSessionManager了 测试版本AFNetworking3.1.0 官方文档 GET/POST请求...error:nil]; 实际请求的样子 GET http://example.com?...uploadProgress.totalUnitCount); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //请求成功...NSLog(@"请求成功:%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _...Nonnull error) { //请求失败 NSLog(@"请求失败:%@",error); }]; 获取Task 普通上传 NSURLSessionConfiguration *configuration
AF发送一个请求很简单,如下面的一个GET请求的例子 // 请求管理器 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; /...progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // 请求成功...} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { // 请求失败 }]; 上面涉及到了...responseObject) { // 解析失败,返回nil if (error) { *error = AFErrorWithUnderlyingError...:请求管理类,它继承自AFURLSessionManager,它主要封装了GET,POST,PUT,DELETE等等HTTPMehtod @interface AFHTTPSessionManager
起初有人推测,NSURLSession 的出现将使AFNetworking 不再有用。但实际上,虽然它们有一些重叠,AFNetworking还是可以提供更高层次的抽象。...现在你可以直接使用它,或者使用 AFHTTPRequestOperationManager /AFHTTPSessionManager 的属性。...handler(); 9. } 10. } 另外无论下载成功与否,以下方法都会被调用: [objc] view plaincopy 1. /* 完成下载任务,无论下载成功还是失败都调用该方法...didFinishDownloadingToURL:(NSURL *)location; 无论下载成功或失败都会调用的方法,类似于try-catch-finally中的finally语句块的执行。...如果下载成功,那么error参数的值为nil,否则下载失败,可以通过该参数查看出错信息: [objc] view plaincopy 1. /* Sent as the last message related
1、先看下运行的结果: 1643887673(2).jpg 1643887673(1).jpg 以上就是执行过程,可以看到字段是没有问题的,第一行数据也没有问题, 但是第二个u2的数据就没有插入成功
上一篇讲到在AFHTTPSessionManager中,在初始化NSMutableURLRequest对象时的流程分析。...在上面的更新进度状态时操作,完全可以放到AFURLSessionManager核心类本身中进行执行,但这样全部放在同一类下处理会不断增加核心类的复杂度。...当task任务完成之后,不管请求成功还是失败,都会执行- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError...和dispatch_get_main_queue线程。...序列化完成之后与error存在时数据处理逻辑相同,最终通过执行AFURLSessionTaskCompletionHandler代码块,根据代码块中的数据,返回至外层方法,判断执行失败block还是成功
使用AFN请求网络一直好好的,无论是http,还是https都正常,突然有一天服务器那边不知道调整了什么(可能是服务器SSL证书到期),每次请求都是返回: Error Domain=NSURLErrorDomain...简书 因为一直使用的是正常申请的https证书,主要是现在用自建证书的公司越来越少了,除了部分个人为了玩。。。因为很多地方都提供免费的。。。...但是如果出现了如上错误可以简单的设置APP端直接信任证书就好: 方法一、一般就是设置AFHTTPSessionManager的securityPolicy OC: AFHTTPSessionManager...*manager = [AFHTTPSessionManager manager]; AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy...那么也可以重写下面的方法来解决 OC: - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge
主要对NSURLSession对象进行了封装,主要有以下核心类 AFURLSessionManager AFHTTPSessionManager 3.Reachability 提供了网络状态相关的接口...请求: AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]init]; [manager GET:@"http://get" parameters...2.调用另外一个方法dataTaskWithRequest去拿到我们最终需要的NSURLSessionDataTask实例,并且在完成的回调里,调用我们传过来的成功和失败的回调。...NSMutableArray array]; // 根据需要排列的对象的description来进行升序排列 // 因为对象的description返回的是NSString,所以此处compare:使用的是...如果是GET、HEAD、DELETE,则把参数quey是拼接到url后面的。
首先,苹果在 iOS9 之后已经放弃了 NSURLSession所以在现在的实际开发中,一般使用的是 iOS7 之后推出的NSURLSession。...现象比较好复现 下一步,定位代码 AFNetwork的代码层数比较多,但核心的方法不多,网上有很多的源码讲解的文章,大家可以参考下 https://www.jianshu.com/p/a360140bf220... ,还有很多分章节分类名进行解析,这里就不一一分享了 ,通过get方法回溯,找到AFNetwork对应使用NSURLSession建立连接的地方 这里有个知识点AFURLSessionManager是AFHTTPSessionManager...父类,NSURLSession的申请在AFURLSessionManager进行了实现,如下 可以看到AFNetwork也使用了session,只是实现的方式不一样,除了加入默认配置文件,还实现了delegate...成功了!
好处是不需要花钱购买,但使用这种证书是不会受信任的,所以需要我们在代码中将该证书配置为信任证书。这就是本文的主要目的。如12306官网的证书。...这里有个地方要注意:苹果的ATS要求服务端必须支持TLS 1.2或以上版本;必须使用支持前向保密的密码;证书必须使用SHA-256或者更好的签名hash算法来签名,如果证书无效,则会导致连接失败。...执行成功后会生成一个.jks文件和一个以你的ip或域名命名的文件夹,文件夹中有一个.cer的证书,这边的.jks文件将在服务端使用.cer文件将在客户端使用,到这里证书的准备工作就完成了。...使用NSURLSession进行请求 NSString *urlString = @"https://xxxxxxx"; NSURL *url = [NSURL URLWithString:urlString...,所以这边我就修改他的源码,当有一个校验成功时即算成功。