众所周知,苹果搞的一套框架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登录:

[objc] view plaincopy
  1. #pragma mark - get/post登录
  2. - (void)getLogin {
  3. //1.管理器
  4. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  5. //2.设置登录参数
  6. NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };
  7. //3.请求
  8. [manager GET:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  9. NSLog(@"GET --> %@, %@", responseObject, [NSThread currentThread]); //自动返回主线程
  10. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  11. NSLog(@"%@", error);
  12. }];
  13. }
  14. /**
  15. *  和上面的GET用法完全一样, 只有一个POST参数不一样
  16. */
  17. - (void)postLogin {
  18. //1.管理器
  19. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  20. //2.设置登录参数
  21. NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };
  22. //3.请求
  23. [manager POST:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  24. NSLog(@"POST --> %@, %@", responseObject, [NSThread currentThread]); //自动返回主线程
  25. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  26. NSLog(@"%@", error);
  27. }];
  28. }

AFN进行网络数据解析,获取Plist,JSON,XML ( AFN不支持自动解析XML ,有专门的框架去做,如SAX,PULL,KissXML等)

[objc] view plaincopy
  1. #pragma mark - get 数据解析
  2. - (void)getJSON {
  3. //1.请求管理器
  4. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  5. //2.发起请求
  6. [manager GET:@"http://localhost/videos.json" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  7. NSLog(@"%@", responseObject);
  8. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  9. NSLog(@"%@", error);
  10. }];
  11. }
  12. /**
  13. *  不支持XML数据解析
  14. */
  15. - (void)getXML {
  16. //1.管理器
  17. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  18. //2.设置返回数据类型
  19. manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //先实例化一下
  20. //3.发起请求
  21. [manager GET:@"http://localhost/videos.xml" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  22. NSLog(@"%@", responseObject);
  23. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  24. NSLog(@"%@", error);
  25. }];
  26. }
  27. - (void)getPlist {
  28. //1.管理器
  29. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  30. //2.设置response类型
  31. manager.responseSerializer = [AFPropertyListResponseSerializer serializer]; //是Response, 别写成request了. 修改为plist类型.
  32. manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; //这个可以直接往框架里面修改.
  33. //3.请求
  34. [manager GET:@"http://localhost/videos.plist" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  35. NSLog(@"%@", responseObject);
  36. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  37. NSLog(@"%@", error);
  38. }];
  39. }

用AFN来POST JSON数据,上传、下载等 。(上传、下载主页说明上有 https://github.com/AFNetworking/AFNetworking )

[objc] view plaincopy
  1. #pragma mark - post json数据与上传文件等
  2. - (void)postJSON {
  3. //1.管理器
  4. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  5. //2.设定类型. (这里要设置request-response的类型)
  6. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  7. manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //这个决定了下面responseObject返回的类型
  8. //    manager.responseSerializer = [AFJSONResponseSerializer serializer];
  9. //  manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
  10. //2.设置登录参数
  11. NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };
  12. //3.发送请求
  13. [manager POST:@"http://localhost/postjson.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  14. //      NSLog(@"postjson--> %@", responseObject);  //这样显示JSON的话需要设置text/plain
  15. NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
  16. NSLog(@"%@",result);
  17. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  18. NSLog(@"%@", error);
  19. }];
  20. }

转载出处:http://blog.csdn.net/xn4545945  

【iOS】网络操作与AFNetworking相关推荐

  1. iOS状态栏操作之获取WiFi信号强度,网络类型,运营商,电池电量,系统时间等

    iOS状态栏操作之获取WiFi信号强度,WiFi名字和IP,网络类型,运营商,电池电量,系统时间等 此篇文章讲述iOS中的状态栏 iOS开发中对状态栏的操作比较少,因为状态栏是系统级别的View,是受 ...

  2. iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求

    原文地址:https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md ...

  3. iOS网络缓存扫盲篇

    当我们在谈论缓存的时候,我们在谈论什么? GET网络请求缓存 80%的缓存需求:两行代码就可满足 控制缓存的有效性 文件缓存:借助ETag或Last-Modified判断文件缓存是否有效 Last-M ...

  4. iOS网络缓存扫盲篇 - 使用两行代码就能完成80%的缓存需求

    当我们在谈论缓存的时候,我们在谈论什么? GET网络请求缓存 80%的缓存需求:两行代码就可满足 控制缓存的有效性 文件缓存:借助ETag或Last-Modified判断文件缓存是否有效 Last-M ...

  5. [深入浅出Cocoa]iOS网络编程之Socket

    一,iOS网络编程层次模型 在前文<深入浅出Cocoa之Bonjour网络编程>中我介绍了如何在Mac系统下进行 Bonjour 编程,在那篇文章中也介绍过 Cocoa 中网络编程层次结构 ...

  6. iOS网络编程开发—HTTP协议

    iOS网络编程开发-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  7. iOS网络编程之Socket

    [深入浅出Cocoa]iOS网络编程之Socket 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 更多 Cocoa 开发文章,敬请访问<深入浅 ...

  8. [深入浅出Cocoa]iOS网络编程之NSStream

    2019独角兽企业重金招聘Python工程师标准>>> [深入浅出Cocoa]iOS网络编程之NSStream 目录(?)[+] [深入浅出Cocoa]iOS网络编程之NSStrea ...

  9. iOS网络NSURLSession使用详解

    一.整体介绍 NSURLSession在2013年随着iOS7的发布一起面世,苹果对它的定位是作为NSURLConnection的替代者,然后逐步将NSURLConnection退出历史舞台.现在使用 ...

最新文章

  1. java+jvm+log_java9 gc log参数迁移
  2. 项目发布: error CS0103: 当前上下文中不存在名称“*****”
  3. zabbix如何监控ip地址_Zabbix主动模式监控动态IP服务器
  4. c 结构体在声明时赋值_Java基础知识 初识Java 循环结构进阶 数组 数据类型 各种运算符...
  5. [转]C++中的三种继承public,protected,private
  6. 简单的php文件上传实例
  7. Sql Server系列:开发存储过程
  8. java redis 原子操作_redis快速入门
  9. Web页面的生命周期函数
  10. Winform基于UnityWebplayer封装用户控件以实现.unity3d文件相对路径(动态src)
  11. 手机输入法带拼音声调_分享4种给拼音加声调的方法,让你的word更有灵魂
  12. 双驰推大规模个性化定制生产迎来颠覆性变革
  13. 荷兰DELTA电源维修SM66-AR-110德尔塔电源
  14. Cesium深入浅出之图层管理器
  15. html5 图片处理 开源,AlloyImage 基于 HTML5 的专业级图像处理开源引擎 - 文章教程...
  16. 5.9.1_P163《C++ Primer Plus (6th)》编程练习 答案
  17. 正则表达式: 以英文字母开头,只能包含英文字母、数字、下划线
  18. 微信公众号支付问题 - 当前页面的URL未注册
  19. 智慧社区解决方案-全套最新
  20. java基础(4)(方法的定义格式,调用方式,使用,参数设置,方法重载等)

热门文章

  1. [转载]拥抱Jini:从Starter Kit 2.0开始(第一部分)
  2. mx450和gtx1050ti哪个好
  3. 悄悄告诉你:11个高质量PNG素材来源,再也不用抠图了~
  4. 十一、捕鱼达人的鱼儿游泳动画
  5. 力扣 两数相加 C语言 题解
  6. 链路预测 matlab,链路预测
  7. springboot游泳池管理系统
  8. mac系统如何新建文件
  9. Swin-Transformer网络结构详解
  10. 生活随记 - 上海普通百姓一个月的开销记录