AFNetworking 为韩流圈项目做的技术储备

HTTP Request Operation Manager
AFHTTPRequestOperationManager封装工厂模式,与Web Server通过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 Multi-Part Request
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 *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
return [documentsDirectoryURL 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 error:nil];

GET 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监控网络状态

Shared Network Reachability
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];

HTTP Manager Reachability
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 evaluates server trust against pinned X.509 certificates and public keys over secure connections.
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.

允许无效的SSL证书
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.securityPolicy.allowInvalidCertificates = YES; // not recommended for production

AFHTTPRequestOperation
  AFHTTPRequestOperation AFURLConnectionOperation的子类请求使用HTTP或HTTPS协议。它封装了可接受的状态码的概念和内容类型,确定请求的成功或失败。
  尽管AFHTTPRequestOperationManager通常是最佳的方法发出请求,可以使用AFHTTPRequestOperation本身。

GET请求 用 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 为韩流圈项目做的技术储备

时间: 2024-10-09 10:30:07

AFNetworking 为韩流圈项目做的技术储备的相关文章

深入思考:根据团队的计划,自己的角色,需要做的技术准备工作

团队计划两个月内完成这款APP的开发,我本人在项目中担任最后完成APP的整合.完善和测试工作,相对于现在的水平,还需要掌握的知识量非常大. 如何在接下来的时间完成好安卓开发的学习,我做了深入的思考.首先,不断提高Java的编程水平,观看安卓APP开发教程视频,不断提高实践水平,以便 在接下来的开发整合工作游刃有余. 需要做的技术准备工作: 1.前期需求规划与信息.交互设计——制定出一个完整的需求文档,功能文档,流程图,时序图. 2.交互设计.UI设计——设计出基本且完善的原型图和app基础的交互

项目做完了欧耶

1引言 1.1编写目的 编写这份项目开发总结报告的目的是介绍我们的产品和实际的开发过程,并相互评价各自的开发工以及经验教训的总结.预期的阅读范围就是本工作组以及安装此软件的用户. 1.2背景 说明: a. 本项目的名称:聚会大狂欢 b. 软件系统的名称:partyplay c. 此软件的任务提出者:辛垧  开发者:汪洋.韩亚华.辛垧.郑云飞.祁子梁.段兴林 d. 用户:所有聚会小团体  安装此软件的计算中心:汪洋小组和张硕小组 1.3参考资料 列出要用到的参考资料:网上的博客和相关书籍 2实际开

挨踢部落故事汇(19):转行做IT技术,你怎么能不知道这些事情?!

如果有个人问你是做什么的,你说是做IT的,他就会一脸羡慕的说:"哇!IT啊?!" 言外之意就是你工资一定很高吧!在国家互联网+的号召下,在全民创业的浪潮中,互联网,IT技术彻底火了,致使IT从业人员的需求量大幅增加,IT从业者瞬间成为了香饽饽,工资也水涨船高:IT行业也完成了从无人问津到令人欣羡的转变. 九衢·iOS 移动开发 本文主人公九衢,国内理工科专业本科毕业,毕业后方向本应该是钢铁领域,但他却在做了大半年的石油天然气管道检测后,毅然决然地转行做IT技术--iOS移动开发.他为什

基于struts2的寝室圈项目

项目描述:为了丰富大学生的寝室文化生活,我们团队受QQ和微信的分享式社交网络平台的启发, 设计了一个"寝室圈"项目,旨在给大学生同学间相互分享自己的寝室文化生活提供一个平台. l 该平台包括首页,相册,寝室动态,智慧寝室,寝室交流,校园动态以及留言等功能. l 本项目旨在帮助大学生通过网络更加广泛地开展寝室社交,传播积极向上的校园寝室文化 l 促进同学们间的交流,丰富大学生的寝室生活和校园生活. 软件开发坏境:jdk1.7.weblogic.windows.Eclipse 开发工具:E

[ionic开源项目教程] - 第1讲 前言,技术储备,环境搭建,常用命令

前言 这是一个系列文章,将持续更新到项目完结,从环境搭建开始讲解,包括实战开发中遇到的各种问题的解决方案,都将毫无保留的分享给大家. 技术储备 开始本项目之前,请确保自己对以下技术点都有所了解. html,css,html5,css3,javascript,angularjs, 理解mvc或者mvvm分层的概念 了解CLI基础. 环境搭建 (有福利) 都知道开发环境搭建是一个麻烦事,作者在这里精心准备了一个已经配置好的开发包,内含jdk,sdk,ant,adb,和一个android23的模拟器.

AppVeyor-CI为GitHub项目做自动化集成(dotnet为主)

travis-ci对dotnet的项目做自动化集成不太友好,尤其是使用mono的编译和不能使用MSTest进行自动化测试,所以转到appveyor进行. appveyor的配置非常简单,有两种方式: 一.全部使用appveyor的后台进行,不需要配置一个yml文件,之后自动下载yml文件上传到项目,或者省略这部,手动点击build. 二.手动编写yml文件,然后结合后台进行,自由度比较高. 主要做法: 1.关联github账号 2.添加github上的项目 3.编写yml项目,只需要置顶.sln

项目中使用技术框架的最重要目的是什么?

最近在着手项目改造,突然想到一个问题,我们为什么要用框架,框架的最重要目的是什么? 如果在框架使用之前,在进行框架搭建时,我可能会想: 要使用最合适的技术架构,解决业务问题 减少开发人员的代码开发量. 让开发人员更加专注于业务流程. 但是在项目运行到一定阶段,我们会发现: 在项目运行到一定时期,技术架构可能在一定程度上不再满足最新的业务问题,但是我们还是要使用框架而不是去自由开发自己的代码. 在某些功能模块中,可能会有很多种代码编写方式,真是比用框架写更少的代码. 再回过头来考虑为什么使用框架时

PHP项目做完后想上线怎么办,告诉你免费上线方法!

PHP程序员找工作的底气是什么?是项目! PHP程序员冲击高薪的信心源自哪里?是项目! PHP程序员掌握理解PHP知识的最好工具是什么?还是项目! 但这么多项目做完后如何上线呢? 为什么项目做完后要尽量上线?可以有下面三个方面的原因: 1.熟悉上线的流程. 2.通过上线引起大家重视,产品意识. 3.对大家找工作有帮助的. 那上线流程又是怎样的呢? 1) 申请空间 2) 购买域名(可选) 3) 将数据库转移到服务器 4) 将项目上传到服务器(注意更改数据库配置) 5) 线上浏览测试 项目上线如此重

模拟项目做完了,一些感悟

项目一共做了近4周,是模仿饿了吗的电脑版网页做的项目.前两周我们在痛苦与绝望中度过--做完了之后回头看这个项目也就不过如此,可是当时才开始做时真的很痛苦. 记得每天坐那边写功能,心中真的是无比烦躁,期间换过一次教室,SVN竟然还用不了了. 最让我痛苦的就是看别人写的代码了,命名的我各种痛苦,还有和组员沟通时,也很痛苦.前两周,有个人MVC三层是什么意思都不知道,我给他解释过3遍,每遍都讲个半天,还让他自己说一遍,当时他会了,过一过他又不会了-- 但我也好不到哪里去,前两周每天都很痛苦,感觉白天都