AFNetworking使用详解
导语:
众所周知,AFNetworking是目前IOS开发中非常受欢迎的第三方网络通信类库,同时AFNetworking对苹果官方NSURLConnection和NSURLSession进行了封装,使用起来可以说是简单的"令人发指".
官网地址:
AFNetworking有关请求与响应的信息
请求:(序列化)
AFURLRequestSerialization
AFHTTPRequestSerializer(默认) 传输的就是二进制
AFJSONRequestSerializer 传输入的二进制是一个JSON格式的二进制 ,只有NSArray,NSDictionay
AFPropertyListRequestSerializer 传输的到时候是一个plist,这个不玩意儿不用,因为他不通用
响应:(反序列化)
<AFURLResponseSerialization>
AFHTTPResponseSerializer //返回的就一个纯洁的二进制
AFJSONResponseSerializer(默认) 返回的是一个JSON格式的二进制,并且AFN帮我们自动序列化成了字典或是数组
AFXMLParserResponseSerializer XMLParser
AFXMLDocumentResponseSerializer (Mac OS X) 不适合我们的iOS
AFPropertyListResponseSerializer plist
AFImageResponseSerializer //国片
AFCompoundResponseSerializer //混合
使用AFNetworking
- GET方法:
//1.首先创建一个管理者
AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager];
//2.发送请求
//在使用AFN的时候,直接传递我们url的字符串就可以了
//AFN在反序列化的时候,默认是帮我们按照JSON的格式去解析
[manager GET:@"http://localhost/test.json" parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
//第一个参数 operation 操作
//第二个参数 responseObject
NSLog(@"%@---%@",responseObject,[responseObject class]);
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
- POST方法:
//1.创建一个基于NSURLConnection的管理
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//2.发送我们的POST请求
//用户名密码
NSDictionary *param = @{@"username":@"admin",@"password":@"123"};
//登陆到得网址
[manager POST:@"http://localhost/login.php" parameters:param success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
NSLog(@"post result====%@---%@",responseObject,[responseObject class]);
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
- AFNetworking之搭配webView使用
注意:因为默认情况下AFNetworking的响应解析方式都是按照JOSN解析,所以我们需要修改AFNetworking的解析方式,但是为了以后使用方便,我们不在AFNetworking基础上修改,我们添加一个类继承自AFHTTPSessionManager然后创建一个单例,这样以后AFNetworking更新,我们的代码也不会因此受到影响.
首先创建NetWorkTool类,并创建单例方法
#import "AFHTTPSessionManager.h"
@interface NetWorkTool : AFHTTPSessionManager
//单例
+ (instancetype)sharedNetWorkTool;
@end
实现单例方法
#import "NetWorkTool.h"
@implementation NetWorkTool
static NetWorkTool *_instance;
+ (instancetype)sharedNetWorkTool{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[NetWorkTool alloc] initWithBaseURL:nil];
_instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
//默认情况下的响应解析方式,就是不管服务器给我们返回的是什么,都按照JSON去解析
//将默认的JSON序列化方式,改成我们最普通的二进制
_instance.responseSerializer = [AFHTTPResponseSerializer serializer];
});
return _instance;
}
@end
在控制器中拖入一个UIWebView试图,通过连线方式连接到控制器中
#import "ViewController.h"
#import "NetWorkTool.h"
@interface ViewController ()
//WebView
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self loadWebView];
}
- (void)loadWebView{
//1.获取我们NetWorkTool的单例
NetWorkTool *netWorkTool = [NetWorkTool sharedNetWorkTool];
//2.发送GET请求 //html
__weak typeof(self) weakSelf = self;
[netWorkTool GET:@"http://www.baidu.com" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@"result===%@----%@",responseObject,[NSThread currentThread]);
//再将我们返回的二进制,转成我们字符串,反序列化
NSString *html = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
//在主线程更新UI
[weakSelf.webView loadHTMLString:html baseURL:[NSURL URLWithString:@"http://www.baidu.com"]];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error===%@",[error localizedDescription]);
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
- AFNetworking之联网检测
联网检测对应状态
AFNetworkReachabilityStatusUnknown = -1, //未知的状态
AFNetworkReachabilityStatusNotReachable = 0, //不能联网
AFNetworkReachabilityStatusReachableViaWWAN = 1, //流量
AFNetworkReachabilityStatusReachableViaWiFi = 2, //wifi
//点击屏幕的时候开始检测
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"%ld",status);
}];
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
- AFNetworking之上传文件
//点击屏幕的时候上传文件
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//获取基于NSURLSession的管理器
AFHTTPSessionManager *manager=[AFHTTPSessionManager manager];
//上传文件
NSDictionary *param=@{@"status":@"this is test"};
[manager POST:@"http://localhost/post/upload-m.php" parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
//获取文件1
NSURL *url1=[[NSBundle mainBundle]URLForResource:@"01.jpg" withExtension:nil];
[formData appendPartWithFileURL:url1 name:@"userfile[]" fileName:@"01.jpg" mimeType:@"image/png" error:NULL];
//获取文件2
NSURL *url2=[[NSBundle mainBundle]URLForResource:@"02.jpg" withExtension:nil];
NSData *data2=[NSData dataWithContentsOfURL:url2];
//[formData appendPartWithFileData:data2 name:@"userfile[]" fileName:@"02.jpg" mimeType:@"image/png"];
//application/octet-stream通用格式
[formData appendPartWithFileData:data2 name:@"userfile[]" fileName:@"02.jpg" mimeType:@"application/octet-stream"];
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
NSLog(@"responseObject--->%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error---->%@",error);
}];
}
我的简书: http://www.jianshu.com/users/666b623d4bf1/latest_articles
AFNetworking使用详解的更多相关文章
- AFNetworking 用法详解
之前一直使用ASIHttpRequest 做网络请求 ,后来新公司用AFNetWorking ,经过一段时间学习总结一下二者的优缺点: 1.AFNetWorking的优缺点 优点: 1.维护和使用者比 ...
- AFNetworking 内部详解
AFNetworking 是一个适用于IOS 和 Mac OSX 两个平台的网络库,他是在Foundation URL Loading System 基础上进行的一套封装 ,并提供了丰富的API接口 ...
- AFNetworking 与 UIKit+AFNetworking 详解
资料来源 : http://github.ibireme.com/github/list/ios GitHub : 链接地址 简介 : A delightful iOS and OS X networ ...
- AFNetworking 3.0 使用详解 和 源码解析实现原理
AFN原理&& AFN如何使用RunLoop来实现的: 让你介绍一下AFN源码的理解,首先要说说封装里面主要做了那些重要的事情,有那些重要的类(XY题) 一.AFN的实现步骤: NSS ...
- iOS开发——网络编程Swift篇&Alamofire详解
Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...
- ios新特征 ARC详解
IOS ARC 分类: IOS ARC2013-01-17 09:16 2069人阅读 评论(0) 收藏 举报 目录(?)[+] 关闭工程的ARC(Automatic Reference Co ...
- Podfile文件用法详解
https://www.jianshu.com/p/b8b889610b7e 2018.01.09 15:51* 字数 2343 阅读 6263评论 3喜欢 34 前言 iOS开发会经常用到cocoa ...
- CocoaPods详解之(二)----进阶篇
CocoaPods详解之----进阶篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/19178709 转载请注明出处 ...
- CocoaPods详解之(一)----使用篇
CocoaPods详解之----使用篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 一.什么是Coc ...
随机推荐
- python PIL except: IOError: decoder jpeg not available
今天在Python运行环境的服务器弄一个有关图像处理的程序时报这样的错: 1 NameError: global name 'Image' is not defined import Image 了下 ...
- 如何开发Android Wear应用程序
Android Wear是连接安卓手机和可穿戴产品的一个平台.自从今年上半年发布以来,Android Wear获得了大量关注,既有来自消费者的关注,也有来自开发商的关注,后者希望自己的应用程序已经准备 ...
- PL/SQL developer export/import (转)
export/import图标为灰色:原因:相关应用程序没有关联菜单栏 --> Tools --> Import Tables... --> Oracle Import Export ...
- POJ Countries in War 3114
题目大意: 给定一些城市,然后再给一些寄信的路信,A,B,H代表把信从A城市寄到B城市需要H小时. 如果没有直接可以寄达的,可以先通过另外一个城市到达,比如A,B可以寄信,B,C可以寄信,那么,A,C ...
- [经典] 在未排序数组中返回topK大的数
解法一,排序 先从大到小快排,然后扫前K个返回 时间复杂度:O(NlogN),空间复杂度O(1) 解法二,优先队列 前K个放入优先队列中,与最小堆顶元素比较大小,若大于则删除堆顶并插入:否则跳过 时间 ...
- 【最小生成树】新的开始(newstart) 解题报告
[题目描述] 发展采矿业当然首先得有矿井, 小FF花了上次探险获得的千分之一的财富请人在岛上挖了n口矿井, 但他似乎忘记考虑的矿井供电问题…… 为了保证电力的供应, 小FF想到了两种办法: 在这一口矿 ...
- 自动化Cobbler安装
#install cobbler-server soft #date 2013.08.07 #disabled iptables and selinux /etc/init.d/iptables st ...
- Wireshark 基本介绍和学习 TCP 三次握手
这篇文章介绍另一个好用的抓包工具 Wireshark, 用来获取网络数据封包,包括 HTTP.TCP.UDP 等网络协议包. 记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过 ...
- Girls' research - HDU 3294 (Manacher处理回文串)
题目大意:给以一个字符串,求出来这个字符串的最长回文串,不过这个字符串不是原串,而是转换过的,转换的原则就是先给一个字符 例如 'b' 意思就是字符把字符b转换成字符 a,那么c->b, d-& ...
- JPA query 基本语法解释
详细语法官网去学习 -->> http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference Qu ...