一、AFNetworking的集成
目前使用人数最多的第三方网络库,没有之一。从开始的NSURLConnection到现在的NSURLSession,它都一直保持着与苹果的步调一致,而由它也衍生出大量的相关第三方网络功能库,不仅仅因为他的可靠,好用,一直保持着维护更新,也是为什么它这么受到广大程序员的青睐。
下面先来给我们的工程集成AFNetworking(这里用的是cocoaPods来管理和集成第三方类库,关于它的安装,CocoaPods的简介及安装和使用,):
然后按下“I”键进入编辑状态,粘贴刚才复制的pod语句:
粘贴完成后,按下“esc”键,退出编辑,再输入“:wq”,保存并退出Vim,这时就会发现项目根目录多了个podfile文件。
看到上面的提示,就表示安装完成了。下面我们就可以很爽的使用了(记住集成完成后,要重新打开项目,而且不要从原来的启动程序进入,选择后缀为.xcworkspace的程序打开)。
二、AFNetworking的使用
注意到咱们集成的版本为3.0.4。
下面的类已从AFNetworking 3.0中废弃:
- AFURLConnectionOperation
- AFHTTPRequestOperation
- AFHTTPRequestOperationManager
以及很多修改,有兴趣的可以了解一下。
下面开始实践一下:
1. // 请求的参数
2. NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"20131129", @"date", @"1", @"startRecord", @"5", @"len", @"1234567890", @"udid", @"Iphone", @"terminalType", @"213", @"cid", nil];
3. // 初始化Manager
4. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
5.
6. // 不加上这句话,会报“Request failed: unacceptable content-type: text/plain”错误,因为我们要获取text/plain类型数据
7. manager.responseSerializer = [AFHTTPResponseSerializer serializer];
8.
9. // post请求
10. [manager POST:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?" parameters:dic constructingBodyWithBlock:^(id _Nonnull formData) {
11. // 拼接data到请求体,这个block的参数是遵守AFMultipartFormData协议的。
12.
13. } progress:^(NSProgress * _Nonnull uploadProgress) {
14. // 这里可以获取到目前的数据请求的进度
15.
16. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
17.
18. // 请求成功,解析数据
19. NSLog(@"%@", responseObject);
20.
21. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
22.
23. NSLog(@"%@", dic);
24.
25. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
26.
27. // 请求失败
28. NSLog(@"%@", [error localizedDescription]);
29. }];
如果是Get请求,相比Post请求,少了请求参数,然后只需将post方法改为get方法(也是直接将请求参数拼接在URL后面):
1. // Get请求
2. [manager GET:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
3. // 这里可以获取到目前的数据请求的进度
4. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
5. // 请求成功,解析数据
6. NSLog(@"%@", responseObject);
7. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
8.
9. NSLog(@"%@", dic);
10. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
11. // 请求失败
12. NSLog(@"%@", [error localizedDescription]);
13. }];
三、总结
在很多场合,比如我们需要当前网络请求,下载,上传的进度,使用AFNetworking可以省去很多麻烦,还有许多复杂的应用场合,相信它可以让你省事很多。