大名鼎鼎的开源网络库AFNetworking 2.0,目前只是翻译了Github上的链接文章,使用教程请点击
http://www.cnblogs.com/YouXianMing/p/3651462.html
https://github.com/AFNetworking/AFNetworking
AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of the
Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac.
Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did!
使用AFNetworking这个网络库来进行开发会令你神清气爽。它建立在Foundation URL Loading System的上层,给Cocoa强大的网络库进行了高层次的扩展。它具有模块化的精良设计,囊括各种易用的API,亲,不用你就落伍了。
最最令人感动的一点,不是这个网络库无所不能。而是,每天都有着许多的开发者齐心协力,共同维护更新这个网络库,为这个网络库贡献自己的一份力量。
下一个工程中,选择AFNetworking吧,或者,在你当前的项目中将它移植进来,我敢保证你会受益无穷的。
How To Get Started(如何开始)
- Download AFNetworking
and try out the included Mac and iPhone example apps - Read the
"Getting Started" guide, FAQ, or other articles on the Wiki - Check out the
documentation for a comprehensive look at all of the APIs available in AFNetworking - Questions?
Stack Overflow is the best place to find answers - 下载AFNetworking的源码,试一下Mac以及iPhone上面的例子
- 读入门指南,提问及答复,或者Wiki上的相关文章
- 细致的看看AFNetworking提供的文档
- 有问题了?上Stack Overflow吧
2.0
AFNetworking 2.0 is a major update to the framework. Building on 2 years of development, this new version introduces powerful new features, while providing an easy upgrade path for existing users.
AFNetworking 2.0有着很大的更新,建立在两年的开发并维护这个库的基础上,新版本带来了更多的特性,当然,他也不会抛弃AFNetworking 1.x的用户,它提供了一个简单的如何从1.x升级到2.0的一篇文档。
Read the
What's New
- Refactored Architecture
- Support for NSURLSession
- Serialization Modules
- Expanded UIKit Extensions
- Real-time functionality with
Rocket - 重构了架构
- 支持NSURLSession
- 模块化的模型
- 扩展了UIKit
- ??????
Requirements(要求)
AFNetworking 2.0 and higher requires Xcode 5, targeting either iOS 6.0 and above, or Mac OS 10.8 Mountain Lion (64-bit with modern Cocoa runtime) and above.
AFNetworking 2.0以及后续高版本需要在Xcode 5上进行开发,iOS版本需要6.0以及以上,Mac OS 10.8以及以上。
For compatibility with iOS 5 or Mac OS X 10.7, use the
For compatibility with iOS 4.3 or Mac OS X 10.6, use the
为了兼容iOS 5或者Mac OS X 10.7,使用1.x版本。
为了兼容iOS 4.3或者Mac OS X 10.6,使用0.10.x版本。
Architecture(结构)
NSURLConnection
-
AFURLConnectionOperation
-
AFHTTPRequestOperation
-
AFHTTPRequestOperationMa
nager
NSURLSession (iOS 7 / Mac OS X 10.9)
-
AFURLSessionManager
-
AFHTTPSessionManager
Serialization
-
-
AFHTTPRequestSerializer
-
AFJSONRequestSerializer
-
AFPropertyListRequestSer
ializer
-
-
-
AFHTTPResponseSerializer
-
AFJSONResponseSerializer
-
AFXMLParserResponseSeria
lizer -
AFXMLDocumentResponseSer
ializer (Mac OS X) -
AFPropertyListResponseSe
rializer -
AFImageResponseSerialize
r -
AFCompoundResponseSerial
izer
-
Additional Functionality
-
AFSecurityPolicy
-
AFNetworkReachabilityMan
ager
Usage(使用)
HTTP Request Operation Manager(HTTP请求操作管理器)
AFHTTPRequestOperationMa
AFHTTPRequestOperationMa
GET
Request(GET请求)
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationMa nager 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-Form-Encoded Request(附带表单编码的POST请求)
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationMa nager 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
Multi-Part Request(复杂的POST请求)
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationMa nager manager]; NSDictionary *parameters = @{@"foo": @"bar"}; NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBloc k:^(id<</span>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
NSURLSessionConfiguratio
AFURLSessionManager
NSURLSessionConfiguratio
对象,它与以下的这些协议融合在一起(,
Creating a Download Task(创建一个下载任务)
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguratio n defaultSessionConfigurat ion]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfigura tion: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 *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; return [documentsDirectoryURL URLByAppendingPathCompon ent:[response suggestedFilename]]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { NSLog(@"File downloaded to: %@", filePath); }]; [downloadTask resume];
Creating an Upload Task(创建一个上传任务)
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguratio n defaultSessionConfigurat ion]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfigura tion: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];
Creating an Upload Task for a Multi-Part Request, with Progress(创建一个复杂的请求,并附带进度)
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBloc k:^(id<</span>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] initWithSessionConfigura tion:[NSURLSessionConfiguratio n defaultSessionConfigurat ion]]; NSProgress *progress = nil; NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRe quest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"Error: %@", error); } else { NSLog(@"%@ %@", response, responseObject); } }]; [uploadTask resume];
Creating a Data Task(创建一个数据任务)
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguratio n defaultSessionConfigurat ion]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfigura tion: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];
Request Serialization(请求序列化)
Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body.
请求序列化器会从URL字符串创建请求,编码参数,查找字符串或者是HTTPbody部分。
NSString *URLString = @"http://example.com"; NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};
Query String Parameter Encoding(查询string的编码)
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3
URL Form Parameter Encoding(查询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 Parameter Encoding(查询json参数的编码)
[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
POST http://example.com/
Content-Type: application/json
{"foo": "bar", "baz": [1,2,3]}
Network Reachability Manager(监测网络管理器)
AFNetworkReachabilityMan
AFNetworkReachabilityMan
Shared Network Reachability(单例形式检测网络畅通性)
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusCha ngeBlock:^(AFNetworkReachabilitySta tus status) { NSLog(@"Reachability: %@", AFStringFromNetworkReach abilityStatus(status)); }];
HTTP Manager with Base URL(用基本的URL管理HTTP)
When a baseURL
如果提供了一个基本的URL地址,那个基本URL网址的畅通性就会被仔细的监测着。
NSURL *baseURL = [NSURL URLWithString:@"http://example.com/"]; AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationMa nager alloc] initWithBaseURL:baseURL]; NSOperationQueue *operationQueue = manager.operationQueue; [manager.reachabilityManager setReachabilityStatusCha ngeBlock:^(AFNetworkReachabilitySta tus status) { switch (status) { case AFNetworkReachabilitySta tusReachableViaWWAN: case AFNetworkReachabilitySta tusReachableViaWiFi: [operationQueue setSuspended:NO]; break; case AFNetworkReachabilitySta tusNotReachable: default: [operationQueue setSuspended:YES]; break; } }];
Security Policy
AFSecurityPolicy
Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled.
Allowing Invalid SSL Certificates(允许不合法的SSL证书)
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationMa nager manager]; manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production
AFHTTPRequestOperation
AFHTTPRequestOperation
AFURLConnectionOperation
Although AFHTTPRequestOperationMa
AFHTTPRequestOperation
AFHTTPRequestOperation
继承自AFURLConnectionOperation
AFHTTPRequestOperationMaAFHTTPRequestOperation
GET
with AFHTTPRequestOperation(使用AFHTTPRequestOperation)
NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; op.responseSerializer = [AFJSONResponseSerializerserializer]; [op setCompletionBlockWithSu ccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; [[NSOperationQueue mainQueue] addOperation:op];
Batch of Operations(许多操作一起进行)
NSMutableArray *mutableOperations = [NSMutableArray array]; for (NSURL *fileURL in filesToUpload) { NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBloc k:^(id<</span>AFMultipartFormData> formData) { [formData appendPartWithFileURL:fileURL name:@"images[]" error:nil]; }]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [mutableOperations addObject:operation]; } NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations :@[...] progressBlock:^(NSUInteger numberOfFinishedOperatio ns, NSUInteger totalNumberOfOperations) { NSLog(@"%lu of %lu complete", numberOfFinishedOperatio ns, totalNumberOfOperations); } completionBlock:^(NSArray *operations) { NSLog(@"All operations in batch complete"); }]; [[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO];