免费开源的iOS开发学习平台

iOS开发之网络编程:6-网络请求实例

本节我们使用聚合数据中申请的【微信精选】API,获取一些新闻类的数据。通过该案例,讲解一下如何使用AFNeworking发送POST请求和GET请求,以及如何对服务器返回的数据进行解析。

准备工作

开始编写代码之前,我们根据上一节所讲的方法在聚合数据上申请【微信精选】数据,并获取该API接口的AppKey。

创建一个Single View Application工程,在info.plist文件中添加App Transport Security Settings相关设置,使得我们能访问HTTP的地址。

使用CocoaPods或者手工方式导入AFNetworking框架,并在ViewController.m中导入AFNetworking框架的头文件。

网络请求实例

通过聚合数据中的API说明,【微信精选】该API的网络请求既可以使用POST请求,也可以使用GET请求,我们接下来以POST请求为例。

设置请求参数。根据请求参数说明,该API中可以设置如下4个参数,其中key为必选参数,其他3个为可选参数,我们创建一个字典类型的对象,并在其中添加请求参数。

NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:@"你的APPKEY值", @"key",nil];

接下来我们使用AFNetworking发送网络请求。首先,初始化一个AFHTTPSessionManager类型的对象--manager。

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

然后使用AFNetworking中的POST请求方法,向指定的服务器地址发送网络请求,并携带相关参数。当获取到服务器返回的数据后,我们通过解析responseObject对象,打印其中携带的部分内容。例如,根据API的接口文档中的“JSON返回示例”,打印其中一篇文章中的标题信息。

[manager POST:@"http://v.juhe.cn/weixin/query" parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
        // 通过uploadProgress可以获取数据请求的进度
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        // 请求成功,解析数据
        NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers  error:nil];
        //获取所需数据
        NSDictionary *dict = dictionary[@"result"];
        NSArray *arr = dict[@"list"];
        NSDictionary *dic = arr[2];
        NSLog(@"%@",dic[@"title"]);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        // 请求失败
        NSLog(@"%@", [error localizedDescription]);
    }];

运行效果:

由于【微信精选】该API可以同时支持GET请求以及POST请求,大家可以再测试一下使用AFNetworking中的GET请求方法来获取服务器数据。

示例代码

https://github.com/99ios/12.6