iOS 网络编程:AFNetworking

1 简介

1.1 概念

AFNetworking网络框架并不是IOS自带的框架,而是第三方的开源框架。它是对NSURLConnection和NSURLSession API的封装,但是目前AFNetworking 3.0已经删除了基于 NSURLConnection API的所有支持,所以本文只记录基于NSURLSession API的相关接口。AFNetworking 框架是基于Object-C语言,若需要使用Swift语言版可以了解Alamofire框架。

个人感觉学习AFNetworking 框架非常麻烦,它没有提供guide,所以只能按着GitHub和头文件进行学习。

1.2 第一个程序

1.2.1 环境配置

环境配置非常简单,有多种方式,在GitHub提供了几种方法,这里使用最简单的方式:导入源码。

新建IOS项目后,导入在GitHub网站下载的AFNetworking 源码,如图 2所示。

?

?

图 2

1.2.2 源码

其使用如下所示,只需引入AFNetworking.h文件即可使用其API。


#include "AFNetworking.h"

-(void)DownloadTask

{

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];

}

?

?

2 AFURLSessionManager

AFURLSessionManager是对NSURLSession的封装,其实现了NSURLSession的四个协议。所以提供的功能与NSURLSession一样,拥有三种任务类型:dataTask、uploadTask和downloadTask。

2.1 使用步骤

其实AFURLSessionManager对NSURLSession的封装,只封装了两个部分:

  • 创建NSURLSession对象的过程;
  • 创建NSURLSessionTask对象过程。

?

从而AFURLSessionManager与NSURLSession类似,如下是使用步骤:

  1. 创建NSURLSessionConfiguration对象;(与NSURLSession一样)
  2. 通过传递NSURLSessionConfiguration对象,创建AFURLSessionManager对象;
  3. 通过传递请求对象(如NSURLRequest对象)给AFURLSessionManager对象的某个方法,从而创建任务(NSURLSessionTask);
  4. 调用NSURLSessionTask对象的resume来启动任务。

?

如下是创建一个Data Task,只有AFURLSessionManager 是AFNetworking提供的类,其它都是IOS自带的类。


NSURLSessionConfiguration *configuration
= [NSURLSessionConfiguration
defaultSessionConfiguration]; //步骤1

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; //步骤2

?

//步骤3

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]; //步骤4

?

2.2 提供的功能

AFURLSessionManager提供的三种任务类型:dataTask、uploadTask和downloadTask,所以提供的功能都是围着这三种任务类型。

2.2.1 创建任务

可以调用AFURLSessionManager对象的相应方法来创建三种任务:

表 31 AFURLSessionManager对象创建任务方法


任务类型


创建方法


语义


NSURLSessionDataTask


dataTaskWithRequest:request:completionHandler:


用NSURLRequest对象创建任务。


dataTaskWithRequest:request:uploadProgress:downloadProgress:


用NSURLRequest对象创建任务。


NSURLSessionUploadTask


uploadTaskWithRequest:request: fromFile:


用NSURLRequest对象创建上传任务,上传的路径是NSURL所指的路径。


uploadTaskWithRequest:request: fromData:


用NSURLRequest对象创建上传任务,上传的是HTTP体。


uploadTaskWithStreamedRequest:request:


用streaming NSURLRequest对象创建上传任务,


NSURLSessionDownloadTask


downloadTaskWithRequest:request:


用NSURLRequest对象创建下载任务。


downloadTaskWithResumeData:resumeData


用NSData对象创建下载任务。

?

2.2.2 获取任务对象

由于AFURLSessionManager对象可以创建三种类型的任务,并且当创建完成后其内部存在所有已经创建任务对象的引用,在AFURLSessionManager对象内部有四个任务集合:

  • tasks:表示当前在managed session运行的data, upload, 和download任务;
  • dataTasks:表示当前在managed session运行的data任务;
  • uploadTasks:表示当前在managed session运行的 upload任务;
  • downloadTasks。表示当前在managed session运行的download任务。

?

2.2.3 监听任务状态

AFURLSessionManager对象可以对所创建的任务进行监听,当这些任务发生变化时,可以执行指定的block块,具体内容可以参考该类的.h文件。

如下是AFURLSessionManager对象的一个方法声明,其语义是指当data task任务收到data对象时,就执行block块:


- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError * _Nullable error))block;

?

3 AFHTTPSessionManager

AFHTTPSessionManager类是AFURLSessionManager类的子类,它只是提供的一些方便进行HTTP请求的方法。当然AFURLSessionManager类本身也可以进行HTTP请求,但需要配置NSURLRequest对象。

3.1 使用步骤

AFHTTPSessionManager使用起来比AFURLSessionManager更加简单,其使用步骤是:

  1. 创建AFHTTPSessionManager对象;
  2. 调用HTTP方法。

?

如下是使用HTTP的GET方法:


-(void)HTTPSessionManager

{

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];

[manager GET:@"http://example.com/foo.json" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {

NSLog(@"success");

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"error");

}];

}

?

3.2 提供的方法

AFHTTPSessionManager类提供的6种常用的HTTP方法:

表 32 AFHTTPSessionManager类提供的HTTP方法


HTTP方法


类方法


语义


GET


GET:URLStringparameters: success:failure:


从服务器获取一份文档


GET:URLString:parameters: progress: success: failure:


HEAD


HEAD:URLString:parameters:success:failure:


只从服务器获取文档的首部


POST


POST:URLString:parameters:progress:success:failure:


向服务器发送需要处理的数据


PUT


PUT:URLString:parameters:success:failure:


将请求的主体部分存储在服务器上。


PATCH


PATCH:URLString:parameters:success:failure:


对可能经过代理服务器传送到服务器上去的报文进行追踪。


DELETE


DELETE:URLString:parameters:success:failure:


从服务器上删除一份文档。

?

4 参考文献

  1. URL Session programming guide。
  2. AFNetworking GitHub地址
  3. ?
时间: 2024-10-25 17:45:18

iOS 网络编程:AFNetworking的相关文章

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

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

IOS网络编程——第三方类库

IOS网络编程——第三方类库 目录 概述 ASIHttpRequest AFNetworking 其他 概述 ASIHttpRequest AFNetworking 其他

iOS网络编程开发—HTTP协议

iOS网络编程开发—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远程的网络资源,格式是http:// http协议是在网络开发中最常用的协议 (2)file 访问的是本地计算机上的资源

iOS网络编程笔记——Socket编程

一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是TCP/IP协议的一个十分流行的编程接口.一个socket由一个IP地址和一个端口号唯一确定.TCP/IP协议的传输层又有两种协议:TCP(传输控制协议)和UDP(用户数据报协议).TCP是基于连接的,而UDP是无连接的:TCP对系统资源的要求较多,而UDP少:TCP保证数据的正确性而UDP可能丢包:

iOS网络编程(六) NSURLSession详解

昨夜浏览Demo的时候,看到别人请求网络数据用的是NSURLSession,当时就在想这里什么,怎么没有用过,引起了我的好奇心,遂去百度-谷歌-官方文档一一查看,有了一定的了解,原来NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的. 查找资料,写了一个小Demo,大家可以看看,有什么不足的地方,可以留言帮我指出来. // // HMTRootViewController.m // // // Created by HMT on 14-6-7.

iOS网络编程开发GET请求和POST请求

iOS网络编程开发GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; NSURL *url=[NSURL URLWithString:urlStr]

iOS网络编程(三) 异步加载及缓存图片---->SDWebImage

@SDWebImage提供一个UIImageView的类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. @SDWebImage的导入1.https://github.com/rs/SDWebImage 下载SDWebImage开源包2.将类包拖入工程,再导入MapKit.framework.ImageIO.framework两个框架3.SDWebImage是支持ARC的,在MRC的工程中要注意,可参考MRC工程配置ARC4.注意:SDWebImag

iOS网络编程开发—JSON和XML数据解析

iOS网络编程开发—JSON解析 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim"]} 标准JSON格式的

IOS网络编程:HTTP

IOS网络编程:HTTP HTTP定义了一种在服务器和客户端之间传递数据的途径. URL定义了一种唯一标示资源在网络中位置的途径. REQUESTS 和 RESPONSES: 客户端先建立一个TCP连接,然后发送一个请求.服务器受到请求处理后发送一个响应向客户端传递数据.然后客户端可以继续发送请求或者关闭这个TCP连接. HTTPS:在TCP连接建立后,发送请求之前,需要建立一个一个SSL会话. request方法和它们的用途 iOS的NSURLRequest和它的子类NSMutableURLR

iOS网络编程--NSConnection的同步连接与异步连接

1 // 2 // ZFViewController.m 3 // 0628-表单验证 4 // 5 // Created by zfan on 14-6-28. 6 // Copyright (c) 2014年 zfan. All rights reserved. 7 // 8 9 #import "ZFViewController.h" 10 #import "MBProgressHUD+MJ.h" 11 12 @interface ZFViewControll