第三方库AFNetworking 3.1.0的简单使用

AFNetworking是一个 在iOS开发中 使用非常多网络开源库.它是一个轻量级的网络请求API类库.

适用于iOS以及Mac OS X。它构建于在(Apple iOS开发文档) NSURLConnection ,  NSOperation , 以及其他熟悉的Foundation技术之上。

下面的类已从AFNetworking 3.0中废弃:

  • AFURLConnectionOperation
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

现在核心代码:AFHTTPSessionManager,<AFNrtworking3.1.0目前使用NSURLSession作为网络类!!!!>

它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松。

官方链接http://cocoadocs.org/docsets/AFNetworking/1.3.0/

重要功能梳理:

  • AFURLConnectionOperation :继承自 NSOperation 实现了NSURLConnection 的代理方法.
  • AFHTTPRequestOperation :   继承自   AFURLConnectionOperation的子类,当request请求使用的协议为HTTP和HTTPS时使用,它封装了用于 决定request是否成功的状态码和内容类型.
  • AFJSONRequestOperation :  继承自AFHTTPRequestOperation,用于下载和处理json response数据.
  • AFXMLRequestOperation : 继承自 AFHTTPRequestOperation,用于下载和处理xml response数据.
  • AFPropertyListRequestOperation : 继承自 AFHTTPRequestOperation,用于下载和处理 property list  response数据.
  • AFHTTPClient :是一个封装了基于http协议的网络应用程序的公共交流模式.包含
    1.发起 基于根路径的使用基本的url相关路径来只做request
    2.为request自动添加设置http headers.
    3.使用http 基础证书或者OAuth来验证request
    4.为由client制作的requests管理一个NSOperationQueue
    5.从NSDictionary生成一个查询字符串或http bodies.
    6.从request中构建多部件
    7.自动的解析http response数据为相应的表现数据
    8.在网络可达性测试用监控和响应变化.

下面我们就来看看AFNetworking的基本使用:

 1 #pragma mark - 网络监测按钮的响应方法
 2 - (IBAction)networkingMonitoringAction:(id)sender {
 3 //isOpen是自己定义的一个Bool值的属性,来切换开关网络检测这一功能.
 4     if (!self.isOpen) {
 5         //打开网络监测
 6         [[AFNetworkReachabilityManager sharedManager] startMonitoring];
 7         self.isOpen = YES;
 8     } else {
 9         //关闭网络监测
10         [[AFNetworkReachabilityManager sharedManager] stopMonitoring];
11         self.isOpen = NO;
12     }
13     //接下来判断当前网络状态:wifi,2G/3G/4G,无网络访问
14     [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
15         switch (status) {
16             case AFNetworkReachabilityStatusUnknown:
17                 NSLog(@"当前网络未知");
18                 break;
19             case AFNetworkReachabilityStatusNotReachable:
20                 NSLog(@"当前无网络访问");
21                 break;
22             case AFNetworkReachabilityStatusReachableViaWWAN:
23                 NSLog(@"当前手机流量网络");
24                 break;
25             case AFNetworkReachabilityStatusReachableViaWiFi:
26                 NSLog(@"当前wifi连接网络");
27                 break;
28
29             default:
30                 break;
31         }
32     }];
33 }

网络状态检测

下面我们来看看怎么实现数据请求:

 1 #pragma mark - GET请求
 2 - (IBAction)getRequestAction:(id)sender {
 3
 4     //参数一:get请求的网址
 5     //参数二:拼接参数body
 6     //参数三:progress表示进度的意思
 7     //参数四:数据请求成功后执行的操作
 8     //参数五:请求失败后报的错误
 9     [self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
10         NSLog(@"下载的进度");
11     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
12         NSLog(@"请求成功%@", responseObject);
13     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
14         NSLog(@"请求失败%@", error);
15     }];
16 }
17
18 #pragma mark - post请求
19 - (IBAction)postRequestAction:(id)sender {
20     /*
21     body: {
22      do = "pri_memberlist";
23      "member_id" = zpHr2dsRvQQxYJxo2;
24      "workspace_id" = ILfYpE4Dhs2gWcuQx;
25      }*/
26    NSString *url = @"http://m.taskwedo.com/API/wedo1/wedo.php";
27
28     //一般的body都是给你一个字典类型的,需要你创建一个字典来接受存储
29     NSMutableDictionary *dic = [NSMutableDictionary dictionary];
30     [dic setValue:@"pri_memberlist" forKey:@"do"];
31     [dic setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"];
32     [dic setValue:@"ILfYpE4Dhs2gWcuQx" forKey:@"workspace_id"];
33
34     [self.session POST:url parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
35         NSLog(@"上传进度");
36     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
37         NSLog(@"请求成功%@", responseObject);
38     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
39         NSLog(@"失败啦,哈哈%@", error);
40     }];
41
42
43 }
44
45 #pragma mark - post请求2(当body中含有汉字或特殊字符的时候,这时候需要转码)
46 - (IBAction)postTwoRequestAction:(id)sender {
47            /* BODY:     address = "";
48            comment = "\U7c7b\U6a21\U5757\U8ba1\U5212\U7528\U5230\U7b2c\U4e09\U90e8\U5206\U4e2d\Uff0c\U5f85\U63d0\U95ee\U3001\U56de\U7b54\U79ef\U7d2f\U5230\U4e00\U5b9a\U6570\U91cf\U65f6\Uff0c\U4fbf\U4e8e\U5927\U5bb6\U7684\U95ee\U9898\U7684\U5feb\U901f\U67e5\U627e\Uff0c\U6240\U4ee5\U63d0\U95ee\U90e8\U5206\U6682\U65f6\U4e0d\U52a0\U5165\U8fd9\U4e2a";
49            do = "add_comment";
50            kind = task;
51            "member_id" = zpHr2dsRvQQxYJxo2;
52            other = "";
53            "task_id" = 55a47e79ec25e3641;*/
54
55     NSString *urlStr = @"http://m.taskwedo.com/API/wedo1/wedo.php";
56
57     NSString *comment = @"类模块计划用到第三部分中,待提问、回答积累到一定数量时,便于大家的问题的快速查找,所以提问部分暂时不加入这个";
58     //对汉字进行转码操作
59     comment = [comment stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
60
61     NSMutableDictionary *dic = [NSMutableDictionary dictionary];
62     [dic setValue:@"" forKey:@"address"];
63     [dic setValue:comment forKey:@"comment"];
64     [dic setValue:@"add_comment" forKey:@"do"];
65     [dic setValue:@"task" forKey:@"kind"];
66     [dic setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"];
67     [dic setValue:@"" forKey:@"other"];
68     [dic setValue:@"55a47e79ec25e3641" forKey:@"task_id"];
69
70     //请求报文
71     [self.session POST:urlStr parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
72         NSLog(@"上传进程%@", uploadProgress);
73     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
74         NSLog(@"请求成功%@", responseObject);
75     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
76         NSLog(@"请求失败%@", error);
77     }];
78
79     //可以看到,在第三方库中,我们直接就可以调用GET和POST请求方法,不用像以前一样,写那么多行代码了,大大简化了代码量
80 }

GET和POST数据请求

注意:AFNetworking可以进行JSON数据解析/Plist数据解析.(不支持XML数据解析)
URL字符串中如果有特殊字符或者中文字符,AFNETWorking并没有做UTF8的转码,需要:url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

时间: 2024-08-08 01:29:26

第三方库AFNetworking 3.1.0的简单使用的相关文章

iOS开发-使用第三方库AFNetWorking解析JSON和XML数据

利用第三方库AFNetWorking解析网络请求的JSON和MXL数据具有很多方便的地方. 第三方库的下载地址:https://github.com/AFNetworking/AFNetworking 导入的包和宏定义 1 #import "ViewController.h" 2 #import "AFNetworking.h" 3 #import "GDataXMLNode.h" 4 5 //json地址 6 #define kJSONUrlS

ios开发之--使用AFNetWorking 3.1.0 ,简单的请求封装类

从苹果系统自带的请求类,到ASIHttpRequest第三方请求类,再到AFNetWorking第三方请求类,目前只要牵扯到数据请求,基本上都是用AFN,所以,这里纯粹是记录下: hRequestTools.h #import <Foundation/Foundation.h> /** * 网络请求类型 */ typedef NS_ENUM(NSUInteger,HttpRequestType) { /** * get请求 */ HttpRequestTypeGet = 1, /** * po

使用第三方库AFNetworking时遇到的问题

在AFSecurityPolicy.m这个类中,会报这样三个错误 1. Use of undeclared identifier 'kSecFormatUnknown' 2. Use of undeclared identifier 'kSecItemPemArmour' 3. Implicit declaration of function 'SecItemExport' is invalid in C99 网上搜索后,发现只要在.pch文件中加入如下代码即可: #ifndef TARGET_

经常使用的iOS SDK库和第三方库

iOS SDK库 1.Foundation Cocoa不是一种编程语言(它可以运行多种编程语言),它也不是一个开发工具(通过命令行我们仍然可以开发Cocoa程序),它是创建Mac OS X和IOS程序的原生面向对象API,为这两者应用提供了编程环境. 我们通常称为“Cocoa框架”,事实上Cocoa本身是一个框架的集合,它包含了众多子框架,其中最重要的要数“Foundation”和“UIKit”.前者是框架的基础,和界面无关,其中包含了大量常用的API:后者是基础的UI类库,以后我们在IOS开发

手思3.0 第三方库介绍

手思3.0第三方库介绍 AFNetworking https://github.com/AFNetworking/AFNetworking MBProgressHUD    https://github.com/jdg/MBProgressHUD SVProgressHUD https://github.com/TransitApp/SVProgressHUD SDWebImage   https://github.com/rs/SDWebImage FMDB          https://

分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业不是百度来的,我只是百度了一些示例代码的意思,怎么用!算了,越解释万一越黑呢!哈哈O(∩_∩)O哈哈~) ----------------------------------------------------------------分界线------------------------------

swift 中使用OC第三方库(以AFNetworking为例)

首先呢  把你需要的第三方库导入到你的项目中来  具体怎么导入 这不是这篇的重点  看上一篇 废话不多  直接上 (1)在项目中直接建一个 oc 的控制器  然后xcode会提醒你  要不要建造桥接文件  选择创建就OK了  看下图最下面  是我创建的 (2)确定使用那个桥接头文件 如下图 (3)在桥接文件里  直接这样写  如下图 (4)然后你就可以在你的项目中使用你添加的库了  就是这么简单 下面来看一下 我在swift中使用的AFNetworking 的实例代码  请求的是百度首页的数据

iOS网络编程(7) 第三方开源库-----&gt;AFNetworking

AFNetworking是一个为 iOS 和 Mac OSX 制作的令人愉快的网络库,它建立在URL 装载系统框架的顶层,内置在Cocoa里,扩展了强有力的高级网络抽象.它的模块架构被良好的设计,拥有丰富的功能,因此,使用起来,必定赏心悦目. @原文链接https://github.com/AFNetworking/AFNetworking,我在此基础上了点配置修改 @介绍 1.支持HTTP请求和基于REST的网络服务(包括GET.POST. PUT.DELETE等) 2.支持ARC 3.要求i

第三方库的简单配置—— CocoaPods

一.配置pods环境 按照下面的顺序在终端中敲入依次敲入命令: 1. gem sources --remove https://rubygems.org/ 2. gem sources -a http://ruby.taobao.org/     PS:这么做的目的是用淘宝的Ruby镜像来访问cocoapods 3. sudo gem install cocoapods 等上几分钟(依网络情况而定),pod环境就搭建好啦! 二.在项目中使用pods 1.右键点击项目,New file->Othe