简介AFNetworking
目前比较主流的网络请求有AFNetworking和MKNetworkKit,但是相对于MKNetworkKit来说,AFNetworking的扩展性更强,并且维护者比较多,AFNetworking是一个在IOS开发中使用非常多网络开源库,支持ARC,支持各种数据转换、下载、上传、缓存、续传,适用于iOS以及Mac OS X. 它构建于在(apple ios开发文档)NSURLConnection, NSOperation,以及其他熟悉的Foundation技术之上。它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松。这里研究的是AFNetworking2.0版本。
使用AFNetWorking进行网络请求:
使用准备阶段:
1.使用时将AFNetWorking导入项目,并引入Security.framework、MobileCoreServices.framework、SystemConfiguration.framework框架。
2. AFNetWorking使用了ARC ,在不使用ARC项目当中使用时,需要AFNetWorking的所有.m文件添加“-fobjc-arc”。
发送网络请求:
1、构造的NSURL对象
2、根据URL对象构造NSURLRequest对象
3、构造不同的Operation接收不同的数据:
AFHTTPRequestOperation:AFURLConnectionOperation的子类,当request使用的协议为HTTP和HTTPS时,它压缩了用于决定request是否成功的状态码和内容类型.
AFJSONRequestOperation:AFHTTPRequestOperation的子类,用于下载和处理jasonresponse数据.
AFXMLRequextOperation:AFHTTPRequestOperation的子类,用于下载和处理xmlresponse数据.
AFPropertyListRequestOperation:AFHTTPRequestOperation的子类,用于下载和处理propertylist response数据.
AFImageRequestOperation:AFHTTPRequestOperation的子类,用于下载和处理图片.
4、当请求成功,则运行成功block块。可以使用获取的数据进行显示和存储。
5、当请求失败时就会运行失败block块,可以提醒错误信息
注:1、在AFNetWorking2.3.0的版本中,可以使用封装好的AFURLResponseSerialization这个封装好的类来获取自己想要的数据格式,比如json和xml。
2、AFNetWorking只能支持异步加载。
使用AFNetWorking进行GET和POST请求:
GET是向服务器发索取数据的一种请求,也就相当于查询信息功能,不会修改类容,POST是有向服务器提交数据的一种请求,影响数据的内容;
发送GET请求:相关代码
NSURL *url = [NSURL URLWithString:@"https://api.douban.com/v2/movie/us_box"];
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"documents/"];
NSLog(@"path%@",path);
AFHTTPClient *client =[[AFHTTPClient alloc] initWithBaseURL:url];
[client getPath:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"失败");
}];
发送POST请求:带有请求体,相关代码
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:2];
[params setObject:@"x" forKey:@"y"];
[params setObject:@"m" forKey:@"n"];
NSURL *url = [NSURL URLWithString:@"https:xxx.com"];
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"documents/"];
AFHTTPClient *client =[[AFHTTPClient alloc] initWithBaseURL:url];
[client getPath:path parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"失败");
}];