众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐。操作起来很不方便。不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题。

一、早前的几个网络框架
1、ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新.
2、MKNetworkKit (印度人写的).
3、AFN一直还在更新.

AFNetworking的出现:MAC/iOS设计的一套网络框架.(为了简化网络操作)

地址:https://github.com/AFNetworking/AFNetworking
*AFN专注与网络数据传输,以及网络中多线程的处理.

二、AFNetworking的使用

1、AFN特性 :
*登录传参数时,传递字典即可.(键名为参数名,键值为参数值).
*自动到子线程中执行,执行完后返回主线程.
*返回的结果自动序列化为NSDictionary.
 
2、使用AFN注意 :
*AFHTTPRequestOperationManager封装了通过HTTP协议与Web应用程序进行通讯的常用方法.(这个实例化的时候不是单例, 因为没有shared字)
*包括创建请求/响应序列化/网络监控/数据安全.
*方法等都是以AF开头的.
3、AFN能做的 (网络中的都涵盖了):
*GET/POST/PUT/DELETE/HEAD请求.
*JSON数据解析/Plist数据解析.(不支持XML数据解析)
*POSTJSON.
*上传/下载.
4、使用步骤 : (可参考说明文档)
1.首先需要实例化一个请求管理器AFHTTPRequestOperationManager.
2.设置请求的数据格式:默认是二进制.(不是可改)
*AFHTTPRequestSerializer(二进制)
*AFJSONRequestSerializer(JSON)
*AFPropertyListRequestSerializer(Plist)
3.设置响应的数据格式:默认是JSON.(不是可改)
*AFHTTPResponseSerializer(二进制)
*AFJSONResponseSerializer(JSON)
*AFPropertyListResponseSerializer(Plist)
*AFXMLParserResponseSerializer(XML)
*AFImageResponseSerializer(Image)
*AFCompoundResponseSerializer(组合的)
4.如果响应者的MIMEType不正确,就要修改acceptableContentTypes.
5.调用方法,发送响应的请求(GET/POST...).

关于修改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,XMLAFN不支持自动解析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"]; //这个可以直接往框架里面修改. | 项目中搜索xuneng, 找到定位点.  //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); }]; }

网络操作与AFNetworking的更多相关文章

  1. iOS 网络操作与AFNetworking

    一.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit (印度人写的). 3.AFN一直还在更新. AFNetworking的出 ...

  2. 【iOS】网络操作与AFNetworking

    众所周知.苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来非常不方便. 不仅要做区分各种请求设置各种不同的參数,并且还要常常在多线程里操作,同一时候还要对请求与返回的 ...

  3. 对比iOS网络组件:AFNetworking VS ASIHTTPRequest

    对比iOS网络组件:AFNetworking VS ASIHTTPRequest 作者 高嘉峻 发布于 2013年2月28日 | 7 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件 ...

  4. iOS开发网络数据之AFNetworking使用

    iOS开发网络数据之AFNetworking使用 如何选择AFNetworking版本 首先得下载AFNetworking库文件,下载时得首先弄清楚,你将要开发的软件兼容的最低版本是多少.AFNetw ...

  5. Cocoa Touch(五):网络请求 NSURLSession/AFNetworking, GCD, NSURLResquest

    NSURLRequest 网络请求的关键的就是NSURLRequest类,它的实例表示了请求报文实体以及请求的缓存策略等等,各种网络框架的最终目标都是把这个对象编译成为请求报文发送出去.下面用一个实例 ...

  6. Alamofire - 优雅的处理 Swift 中的网络操作

    网络处理,应该是我们平时开发的时候最常用到的操作.比如读取 JSON 数据,下载图片,这些操作都要和网络打交道,一个高效稳定的网络操作库对于提升我们日常的开发效率有着非常关键的作用.Alamofire ...

  7. android内部培训视频_第四节(1)_异步网络操作

    第四节(1):异步网络操作  一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMa ...

  8. Android网络操作的几种方法

    安卓开发软件:AndroidStudio 服务器软件:Myeclipse+Tomcat 首先无论是哪种方式,安卓手机软件要想联网,必须要申请联网权限(android.permission.INTERN ...

  9. 在 shell 脚本获取 ip、数字转换等网络操作

    在 shell 脚本获取 ip.数字转换等网络操作 ip 和数字的相互转换 ip转换为数字 :: function ip2num() { local ip=$1 local a=$(echo $ip ...

随机推荐

  1. Mac中编译安装Qt 4.4

    解压下载到的.gz源码:gunzip xxx.tar.gztar xvf xxx.tar, 其实在Mac中可以直接双击解压的.然后定位到解压后的目录下:./configuremakesudo make ...

  2. fork()和vfork()区别

    fork创建进程,子进程和父进程不一定谁先执行 vfork创建的进程,不分配新的资源,子进程用父进程相应的资源,且子进程先执行. 用vfork创建的进程,资源共享,那么,数据是不是不牵扯通信间的机制, ...

  3. js设置datagriad的行移动

    //                    ,//                formatter: function(value,row,index){//                    ...

  4. POJ1182

    这题需要注意就是 并查集中 相对位置 注意与绝对距离区别 #include<cstdio> #define maxn 50005 int ans,i,a,b,p,fa,fb,n,k; in ...

  5. poj2月下旬题解

    poj2388 水题 poj1273 最大流初步 poj2456 简单的二分答案 poj2309 论lowbit的重要性 poj1734 floyd求最小环 poj1001 细节题 poj2184 0 ...

  6. 【转】蓝牙ble app开发(三) -- 抓包

    原文网址:http://blog.csdn.net/lckj686/article/details/43156617 关于android 蓝牙app开发抓包的重要性在 android 蓝牙ble ap ...

  7. Ruby类,模块1

    类的扩展和继承 class Fixnum def dosome(str) puts str end def abs puts "覆盖了原有的方法" end end puts 1.c ...

  8. Spring AOP前置通知和后置通知

    Spring AOP AspectJ:Java社区里最完整最流行的AOP框架 在Spring2.0以上的版本中,可以使用基于AspectJ注解或基于XML配置的AOP 在Spring中启用Aspect ...

  9. Entity Framework中的Migration问题

    1.自从用上了Entity Framework(简称EF),妈妈再也不用担心我要写那么复杂的SQL语句了! 这是微软新一代的ORM工具,它能够将数据库的表中的记录映射成为程序中的一个对象,当然也能够将 ...

  10. [转] Attach、Detach和DeleteObject

    原文:Attach.Detach和DeleteObject,想飞的梦想 1.CWnd Attatch和Detach的关系 首先,要明白Windows对象和MFC对象的区别. MFC对象实际上并没有把整 ...