AFNetworking
http://blog.csdn.net/yin_xianwei/article/details/19200959
谷歌翻译
AFNetworking是为iOS和Mac OS X。它是建立在之上的愉快的网络库基金会的URL加载系统 ,延长内置到可可的功能强大的高级网络抽象。 它有一个模块化的架构,设计精良,功能丰富的API,是一个欢乐的使用。
也许,最重要的功能,但是,是谁使用,每天贡献AFNetworking开发商惊人的社群。 AFNetworking一些权力在iPhone,iPad和Mac的最流行和广受好评的应用程序。
选择AFNetworking你的下一个项目,或迁移在你现有的项目 -你很高兴你没有!
如何开始
- 下载AFNetworking并尝试了包括Mac和iPhone应用程序的例子
- 阅读“入门”指南 , 常见问题 ,或对维基的其他文章
- 退房的文档进行全面审视所有的API提供AFNetworking
- 有问题吗? 堆栈溢出是找到答案的最佳场所
安装与CocoaPods
CocoaPods是一个依赖经理的Objective-C,它能够自动并简化使用像AFNetworking的第三方库在项目的进程。 请参阅“入门”指南获取更多信息 。
Podfile
平台:IOS,'7 .0'
荚“AFNetworking”,“~> 2.0”
2.0
AFNetworking 2.0是一个重大更新的框架。 建设2年的发展,这个新版本引入了强大的新功能,同时提供了一个简单的升级路径,为现有的用户。
阅读AFNetworking 2.0迁移指南为建筑和API的变化的概述。
最新消息
- 重构架构
- 支持NSURLSession
- 序列化模块
- 扩大的UIKit扩展
- 实时功能与火箭
要求
AFNetworking 2.0和更高要求的Xcode 5,确定目标的的iOS 6.0及以上版本,或Mac OS 10.8山狮( 64位与现代可可运行时 )及以上。
对于与iOS 5或Mac OS X 10.7的兼容性,请使用最新的1.x的版本 。
对于与iOS 4.3或Mac OS X 10.6的兼容性,请使用最新的0.10.x版本 。
建筑
NSURLConnection的
- AFURLConnectionOperation
- AFHTTPRequestOperation
- AFHTTPRequestOperationManager
NSURLSession(iOS的7 / Mac OS X的10.9)
- AFURLSessionManager
- AFHTTPSessionManager
序列化
- <AFURLRequestSerialization>
- AFHTTPRequestSerializer
- AFJSONRequestSerializer
- AFPropertyListRequestSerializer
- <AFURLResponseSerialization>
- AFHTTPResponseSerializer
- AFJSONResponseSerializer
- AFXMLParserResponseSerializer
- AFXMLDocumentResponseSerializer (Mac OS X中)
- AFPropertyListResponseSerializer
- AFImageResponseSerializer
- AFCompoundResponseSerializer
附加功能
- AFSecurityPolicy
- AFNetworkReachabilityManager
用法
HTTP请求营运经理
AFHTTPRequestOperationManager封装与Web应用程序进行通信通过HTTP,包括要求制作,响应序列化,网络可达性监控和安全性,以及要求经营管理的常见模式。
GET请求
- AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
- [manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation*operation, id responseObject) {
- NSLog(@"JSON: %@", responseObject);
- } failure:^(AFHTTPRequestOperation *operation, NSError*error) {
- NSLog(@"Error: %@", error);
- }];
POST的URL格式编码的请求
- AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
- NSDictionary *parameters = @{@"foo":@"bar"};
- [manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation*operation, id responseObject) {
- NSLog(@"JSON: %@", responseObject);
- } failure:^(AFHTTPRequestOperation *operation, NSError*error) {
- NSLog(@"Error: %@", error);
- }];
POST多部分请求
- AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
- NSDictionary *parameters = @{@"foo":@"bar"};
- NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
- [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
- [formData appendPartWithFileURL:filePath name:@"image" error:nil];
- } success:^(AFHTTPRequestOperation *operation,id responseObject) {
- NSLog(@"Success: %@", responseObject);
- } failure:^(AFHTTPRequestOperation *operation, NSError*error) {
- NSLog(@"Error: %@", error);
- }];
AFURLSessionManager
AFURLSessionManager创建和管理一个NSURLSession根据指定的对象NSURLSessionConfiguration对象,这符合<NSURLSessionTaskDelegate> , <NSURLSessionDataDelegate> , <NSURLSessionDownloadDelegate>和<NSURLSessionDelegate> 。
创建下载任务
- NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
- AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
- NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
- NSURLRequest *request = [NSURLRequest requestWithURL:URL];
- NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL*(NSURL *targetPath, NSURLResponse *response) {
- NSURL *documentsDirectoryPath = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) firstObject]];
- return [documentsDirectoryPath URLByAppendingPathComponent:[response suggestedFilename]];
- } completionHandler:^(NSURLResponse *response, NSURL*filePath, NSError *error) {
- NSLog(@"File downloaded to: %@", filePath);
- }];
- [downloadTask resume];
创建上传任务
- NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
- AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
- NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
- NSURLRequest *request = [NSURLRequest requestWithURL:URL];
- NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
- NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse*response, id responseObject, NSError*error) {
- if (error) {
- NSLog(@"Error: %@", error);
- } else {
- NSLog(@"Success: %@ %@", response, responseObject);
- }
- }];
- [uploadTask resume];
创建上传任务的多部分请求,与进展
- NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
- [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
- } error:nil];
- AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
- NSProgress *progress = nil;
- NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse*response, id responseObject, NSError*error) {
- if (error) {
- NSLog(@"Error: %@", error);
- } else {
- NSLog(@"%@ %@", response, responseObject);
- }
- }];
- [uploadTask resume];
创建数据任务
- NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
- AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
- NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
- NSURLRequest *request = [NSURLRequest requestWithURL:URL];
- NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse*response, id responseObject, NSError*error) {
- if (error) {
- NSLog(@"Error: %@", error);
- } else {
- NSLog(@"%@ %@", response, responseObject);
- }
- }];
- [dataTask resume];
请求序列化
请求序列化创建URL字符串,编码参数作为一个查询字符串或HTTP主体请求。
- NSString *URLString = @"http://example.com";
- NSDictionary *parameters = @{@"foo":@"bar", @"baz": @[@1,@2, @3]};
查询字符串参数编码
- [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters];
- ET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3
URL,表单参数编码
- [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
- POST http://example.com/
- Content-Type: application/x-www-form-urlencoded
- foo=bar&baz[]=1&baz[]=2&baz[]=3
JSON编码参数
- [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
- POST http://example.com/
- Content-Type: application/json
- {"foo": "bar", "baz": [1,2,3]}
网络可达性管理
AFNetworkReachabilityManager监控领域的可达性,并为WWAN和WiFi网络接口的地址。
共享网络可达性
- [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
- NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
- }];
与基本URL的HTTP经理
当baseURL提供,网络可达性的作用范围是该基地URL的主机。
- NSURL *baseURL = [NSURL URLWithString:@"http://example.com/"];
- AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL];
- NSOperationQueue *operationQueue = manager.operationQueue;
- [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
- switch (status) {
- case AFNetworkReachabilityStatusReachableViaWWAN:
- case AFNetworkReachabilityStatusReachableViaWiFi:
- [operationQueue setSuspended:NO];
- break;
- case AFNetworkReachabilityStatusNotReachable:
- default:
- [operationQueue setSuspended:YES];
- break;
- }
- }];
安全策略
AFSecurityPolicy评估对固定X.509证书和通过安全连接的公共密钥服务器信任。
新增固定SSL证书到你的应用有助于防止人在这方面的中间人攻击和其他安全漏洞。 应用程序处理敏感的客户数据或财务信息我们强烈建议路线在使用SSL钉扎配置和启用HTTPS连接的所有通信。
使无效的SSL证书
- AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
- nager.securityPolicy.allowInvalidCertificates =YES; // 不建议在生产
AFHTTPRequestOperation
AFHTTPRequestOperation是的一个子类AFURLConnectionOperation使用HTTP或HTTPS协议请求。 它封装的接受状态代码和内容类型,这决定了请求的成功或失败的概念。
虽然AFHTTPRequestOperationManager通常是去提出要求的最佳途径, AFHTTPRequestOperation可以单独使用。
GET with AFHTTPRequestOperation
- NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];
- NSURLRequest *request = [NSURLRequest requestWithURL:URL];
- AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
- op.responseSerializer = [AFJSONResponseSerializer serializer];
- [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation*operation, id responseObject) {
- NSLog(@"JSON: %@", responseObject);
- } failure:^(AFHTTPRequestOperation *operation, NSError*error) {
- NSLog(@"Error: %@", error);
- }];
- [[NSOperationQueue mainQueue] addOperation:op];
操作的批处理
- NSMutableArray *mutableOperations = [NSMutableArray array];
- for (NSURL *fileURL in filesToUpload) {
- NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
- [formData appendPartWithFileURL:fileURL name:@"images[]" error:nil];
- }];
- AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
- [mutableOperations addObject:operation];
- }
- NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:@[...] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
- NSLog(@"%lu of %lu complete", numberOfFinishedOperations, totalNumberOfOperations);
- } completionBlock:^(NSArray *operations) {
- NSLog(@"All operations in batch complete");
- }];
- [[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO];
单元测试
AFNetworking包括一套内部的测试子目录中的单元测试。 为了运行单元测试,你必须通过CocoaPods安装测试的依赖关系:
$ cd Tests
$ pod install
一旦测试的依赖安装,你可以通过在Xcode的'的iOS测试“和”OS X的测试“计划,执行测试套件。
使用xctool
测试也可以通过命令行或在一个持续集成环境中运行xctool ,它可以安装自制软件 :
$ brew update
$ brew install xctool --HEAD
一旦xctool安装,你可以通过执行该套件rake test 。
AFNetworking相关推荐
- 对AFNetworking的简单封装
#import "YGLoadDataManager.h" #import "AFNetworking.h" @implementation YGLoadDat ...
- 详解AFNetworking的HTTPS模块
0.0 简述 文章内容包括: AFNetworking简介 ATS和HTTPS介绍 AF中的证书验证介绍 如何创建服务端和客户端自签名证书 如何创建简单的https服务器 对CA正式证书和自签名证书的 ...
- HTTPS网络加密双向验证-使用AFNetworking封装
1.首先使用OC封装请求头 #import <Foundation/Foundation.h> #import "AFNetworking.h" @interface ...
- 源码阅读:AFNetworking(十六)——UIWebView+AFNetworking
该文章阅读的AFNetworking的版本为3.2.0. 这个分类提供了对请求周期进行控制的方法,包括进度监控.成功和失败的回调. 1.接口文件 1.1.属性 /**网络会话管理者对象*/ @prop ...
- 使用 AFNetworking 进行 XML 和 JSON 数据请求
(1)XML 数据请求 使用 AFNetworking 中的 AFHTTPRequestOperation 和 AFXMLParserResponseSerializer,另外结合第三方框架 XMLD ...
- AFNetworking 源代码分析
关于其他 AFNetworking 源代码分析的其他文章: AFNetworking 概述(一) AFNetworking 的核心 AFURLSessionManager(二) 处理请求和响应 AFU ...
- 源码阅读:AFNetworking(八)——AFAutoPurgingImageCache
该文章阅读的AFNetworking的版本为3.2.0. AFAutoPurgingImageCache该类是用来管理内存中图片的缓存. 1.接口文件 1.1.AFImageCache协议 这个协议定 ...
- AFNetworking 3.0 断点续传 使用记录
最近项目中用到了压缩包下载,使用AFNetworking 3.0 下载压缩包 支持断点续传 代码如下: #import "HDInternet_handler.h" #import ...
- iOS开发网络数据之AFNetworking使用
如何选择AFNetworking版本 首先得下载AFNetworking库文件,下载时得首先弄清楚,你将要开发的软件兼容的最低版本是多少.AFNetworking 2.0或者之后的版本需要xcode5 ...
- NSURLConnection实现文件上传和AFNetworking实现文件上传
请求的步骤分为4步 1.创建请求 2.设置请求头(告诉服务器这是一个文件上传的请求) 3.设置请求体 4.发送请求 NSURLConnection实现文件上传 // 1.创建请求NSURL *url ...
最新文章
- 【推荐】LSI(latent semantic indexing) 完美教程
- maven 构建web程序出现问题
- 学长毕业日记 :本科毕业论文写成博士论文的神操作20210312
- php微信公众号的服务器配置,微信公众号服务器配置选项PHP示例代码
- esl证明函 oracle_强弱分明 Astralis证明之战—ESL科隆B组浅析
- dart基础之异步编程
- 安卓短信功能全解:调用系统短信功能发送短信、彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信。
- Python实现给定两点经纬度数据求解两点平面直线距离与方位角
- Proteus安装图文教程
- 我国标准时间授时方法
- Zynga就收购顶尖移动设备游戏《Toon Blast》和《Toy Blast》的开发商伊斯坦布尔Peak公司达成协议
- 隐私计算概念和技术体系
- IFB上挂载NETEM
- Qt - QLabel设置字体颜色
- 图像相似度对比-直方图
- Linux与Windows的区别与比较,及Linux基本命令
- 实验三 数据库完整性技术
- 在win10安装Charles和证书
- 达内 Java 全套教程 NPM、PYPI、DockerHub 备
- led接口实验微型计算机,微型计算机原来与接口技术实验报告(全)