【iOS】网络操作与AFNetworking
众所周知。苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐。操作起来非常不方便。
不仅要做区分各种请求设置各种不同的參数,并且还要常常在多线程里操作,同一时候还要对请求与返回的数据做各种序列化的操作。同一时候还要考虑请求数据的安全等一堆问题。
可是有BUG, 已经停止更新.
AFNetworking的出现:MAC/iOS设计的一套网络框架.(为了简化网络操作)
二、AFNetworking的使用
由于没有shared字)
: (可參考说明文档)
关于改动AFN源代码:通常序列化时做对text/plan等的支持时。能够一劳永逸的改动源代码,在acceptableContentTypes中改动就可以。
AFN进行GET、POST登录:
#pragma mark - get/post登录
- (void)getLogin {
//1.管理器
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //2.设置登录參数
NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" }; //3.请求
[manager GET:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"GET --> %@, %@", responseObject, [NSThread currentThread]); //自己主动返回主线程
} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
} /**
* 和上面的GET使用方法全然一样, 仅仅有一个POST參数不一样
*/
- (void)postLogin {
//1.管理器
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //2.设置登录參数
NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" }; //3.请求
[manager POST:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"POST --> %@, %@", responseObject, [NSThread currentThread]); //自己主动返回主线程
} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
AFN进行网络数据解析。获取Plist,JSON。XML(AFN不支持自己主动解析XML,有专门的框架去做,如SAX。PULL。KissXML等)
#pragma mark - get 数据解析
- (void)getJSON {
//1.请求管理器
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //2.发起请求
[manager GET:@"http://localhost/videos.json" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
} /**
* 不支持XML数据解析
*/
- (void)getXML {
//1.管理器
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //2.设置返回数据类型
manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //先实例化一下 //3.发起请求
[manager GET:@"http://localhost/videos.xml" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
} - (void)getPlist {
//1.管理器
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //2.设置response类型
manager.responseSerializer = [AFPropertyListResponseSerializer serializer]; //是Response, 别写成request了. 改动为plist类型.
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; //这个能够直接往框架里面改动. //3.请求
[manager GET:@"http://localhost/videos.plist" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
用AFN来POST JSON数据,上传、下载等。(上传、下载主页说明上有https://github.com/AFNetworking/AFNetworking)
#pragma mark - post json数据与上传文件等
- (void)postJSON {
//1.管理器
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //2.设定类型. (这里要设置request-response的类型)
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //这个决定了以下responseObject返回的类型
// manager.responseSerializer = [AFJSONResponseSerializer serializer];
// manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; //2.设置登录參数
NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" }; //3.发送请求
[manager POST:@"http://localhost/postjson.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {
// NSLog(@"postjson--> %@", responseObject); //这样显示JSON的话须要设置text/plain
NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"%@",result);
} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];
}
转载请注明出处:http://blog.csdn.net/xn4545945
【iOS】网络操作与AFNetworking的更多相关文章
- iOS 网络操作与AFNetworking
一.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit (印度人写的). 3.AFN一直还在更新. AFNetworking的出 ...
- 对比iOS网络组件:AFNetworking VS ASIHTTPRequest
对比iOS网络组件:AFNetworking VS ASIHTTPRequest 作者 高嘉峻 发布于 2013年2月28日 | 7 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件 ...
- IOS网络请求框架AFNetworking和ASIHttpRequest对比
ASI基于CFNetwork框架开发,而AFN基于NSURL. ASI更底层,请求使用创建CFHTTPMessageRef进行,使用NSOperationQueue进行管理,ASIHTTPReques ...
- 网络操作与AFNetworking
众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各 ...
- 对比iOS网络组件:AFNetworking VS ASIHTTPRequest(转载)
在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题.一般开发者都会选择一个第三方的网络组件作为服务,以提高开发效率和稳定性.这些组件把复杂的网络底层操作封装成友好的类和方法, ...
- iOS网络开发之AFNetworking
概述 AFNetworking是一个非常受欢迎的轻量级的iOS.Mac OS X网络通信类库.它建立在NSURLConnection.NSOperation以及其技术的基础上,有着精心设计的模块结构和 ...
- iOS 网络编程:AFNetworking
1 简介 1.1 概念 AFNetworking网络框架并不是IOS自带的框架,而是第三方的开源框架.它是对NSURLConnection和NSURLSession API的封装,但是目前AFNetw ...
- IOS网络请求之AFNetWorking 3.x 使用
前言: 计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前 ...
- iOS开发网络数据之AFNetworking使用
iOS开发网络数据之AFNetworking使用 如何选择AFNetworking版本 首先得下载AFNetworking库文件,下载时得首先弄清楚,你将要开发的软件兼容的最低版本是多少.AFNetw ...
随机推荐
- 洛谷.4383.[八省联考2018]林克卡特树lct(树形DP 带权二分)
题目链接 \(Description\) 给定一棵边带权的树.求删掉K条边.再连上K条权为0的边后,新树的最大直径. \(n,K\leq3\times10^5\). \(Solution\) 题目可以 ...
- bzoj 3240 矩阵乘法+十进制快速幂
首先,构造出从f[][i]->f[][i+1]的转移矩阵a,和从f[i][m]->f[i+1][1]的转移矩阵b, 那么从f[1][1]转移到f[n][m]就是init*(a^(m-1)* ...
- python开发_logging_日志处理
在很多编程语言中,都会出现日志处理操作,python也不例外... 接下来我们来看看python中的logging模块 ''' python中,logging模块主要是处理日志的. 所谓日志,可理解为 ...
- http状态码学习笔记
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求. ...
- Linux下访问window挂载的磁盘
点击window挂在的磁盘,如下图左侧"文档". 出现如下错误: Error mounting /dev/sda3 .... Command-line `mount -t &quo ...
- mac下git+maven+jenkins自动打包发布
随着springboot+springcloud(dubbo)越来越多人使用,流行的微服务的概念越来越深入人心.分布式部署越来越复杂,给手动发布带来很大工作量.为了方便前期测试和后期线上部署更新,可使 ...
- Flex父子窗体相互调用
Flex父子窗体相互调用 1.设计思路 (1)子窗体调用父窗体的方法 (2)子窗体做了改动后,返回父窗体,父窗体调用子窗体函数 2.设计源代码 (1)父窗体 ParentWindow.mxml: &l ...
- oracle sql语句怎么查询所有存储过程中是否包含某个注释?
select text from all_source where type='PROCEDDURE' and name='过程名'and instr(text,'注释内容')>0
- MVC为用户创建专属文件夹
假设需要为用户创建专属文件夹,文件夹名为用户名,并且需要根据用户类型在不同的文件夹下创建目标文件夹. 在F盘创建"Users"文件夹,在其中创建"Gold"文件 ...
- python测试开发django-8.windows系统安装mysql8教程
前言 MySQL 是最流行的关系型数据库管理系统,可以在本地搭建一个mysql的环境,便于学习. windows7/windows10 mysql-8.0.11-winx64 下载安装包 mysql的 ...