目录
前言
如何利用AFNetworing实现网络请求
利用单例
举行网络申请
结语
前言
OC中原生的网络请求流程非常贫困,通常是以下游程:
- 创建NSURL对象确定请求地址。
- 利用NSURL创建NSURLRequest对象,可设置请求方法、请求头等。
- 创建NSURLSession对象,通常利用共享会话。
- 利用NSURLSession创建数据任务NSURLSessionDataTask,传入请求对象和回调方法。
- 启动数据任务,调用resume方法。
- 在回调方法中处置惩罚响应数据或错误情况。
- (可选)可在需要时取消请求,调用数据任务的cancel方法。
笔者之前在天气预报项目中利用时,也只是知道了利用的方法依葫芦画瓢,并且申请流程非常繁琐,现在假如利用AFNetworking第三方库来实现网络请求,就会变得简便很多。
如何利用AFNetworing实现网络请求
利用AFNetworking实现网络请求大致流程如下:
- 创建 AFHTTPSessionManager 对象作为请求管理者。
- 确定请求的 URL,创建 NSURL 对象。
- 对于 GET 请求:
- 准备请求参数,创建 NSDictionary 对象。
- 利用 GET 方法发起请求,传入 URL、参数、乐成回调和失败回调。
- 对于 POST 请求:
- 准备请求参数和请求体数据。
- 利用 POST 方法发起请求,传入 URL、参数、乐成回调和失败回调。
- 在乐成回调中处置惩罚响应数据。
- 在失败回调中处置惩罚请求错误。
- (可选)假如需要取消请求,可对请求管理者的任务集合举行取消操作。
下面以GET为例演示一下具体流程
利用单例
首先,我们在实现网络请求时,应利用单例来统一实现,这样做的好处是,可以制止在差别的页面反复创建对象申请网络请求,同时也更有利于维护
以是实现网络请求的第一步,便是创建一个单例,关于创建单例的知识,笔者之前已有博客详细讲述,这里就不多赘述了,这里附上链接:
举行网络申请
我们在举行网络请求时,将JSON数据直接转换成Model,方便我们实现MVC的结构
- //在.h文件中,定义给block命名:typedef void(^successBlock)(testModel* testModel);
- - (void) NetWorkWithData {
- AFHTTPSessionManager* manger = [AFHTTPSessionManager manager];
- NSString* str = @"https://news-at.zhihu.com/api/4/version/ios/2.3.0";
- [manger GET:str parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
- testModel* model = [testModel yy_modelWithJSON:responseObject];
- } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- NSLog(@"error");
- }];
- }
复制代码 这样就实现了网络请求并将数据转换成了Model,而原生的请求流程如下:
- void dataload {
- NSString* urlString = @"https://devapi.qweather.com/v7/weather/3d?location=101010100&key=34e1f7a3ef5544d393fcafaea08f0f1b";
- NSURL* url = [NSURL URLWithString:urlString];
- NSURLRequest *request = [NSURLRequest requestWithURL:url];
- NSURLSession *session = [NSURLSession sharedSession];
- NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
- if (!error && data) {
- NSError *jsonError;
- NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
- if (!jsonError && [jsonDict isKindOfClass:[NSDictionary class]]) {
- AModel *model = [AModel yy_modelWithDictionary:jsonDict];
- NSLog(@"%@",model);
- }
- } else {
- NSLog(@"Error: %@", error);
- }
- }];
- [task resume];
- }
复制代码 显而易见,利用AFNetworking大大减小了代码量,更便于阅读和编写。
这里有关GET方法的几个参数如下:
URL 参数:
- 范例:NSURL 或者其字符串表示形式。
- 描述:这是要请求的网络资源的地址。它指定了请求的目标位置,例如 https://example.com/api/data。
parameters 参数:
- 范例:NSDictionary。
- 描述:这是一个字典,用于通报请求的参数。在 GET 请求中,这些参数通常会被附加到 URL 的查询字符串中。例如,假如参数字典为 @{@"param1": @"value1", @"param2": @"value2"},并且 URL 是 https://example.com/api/data,那么终极的请求 URL 大概会酿成 https://example.com/api/data?param1=value1¶m2=value2。
progress 参数:
- 范例:通常是一个 void (^)(NSProgress *downloadProgress) 范例的块。
- 描述:这个参数用于跟踪下载进度。它吸收一个 NSProgress 对象,该对象包含了已下载的数据量、总数据量等信息。可以在这个块中实现进度条更新等操作。假如不需要跟踪进度,可以传入 nil。
headers 参数:
- 范例:NSDictionary。
- 描述:用于设置 HTTP 请求头部信息。例如,可以设置Authorization举行身份验证,设置User-Agent表明客户端范例等。通过设置差别的头部,可以控制服务器对请求的处置惩罚方式。
success 参数:
- 范例:void (^)(NSURLSessionDataTask *task, id responseObject) 范例的块。
- 描述:这是请求乐成后的回调块。当请求乐成时,这个块会被调用。NSURLSessionDataTask 参数是表示当前请求任务的对象,可以用于取消请求等操作。responseObject 参数是服务器返回的响应数据,通常是一个 NSDictionary 或 NSArray,具体取决于服务器的响应格式。可以在这个块中对响应数据举行处置惩罚息争析。
failure 参数:
- 范例:void (^)(NSURLSessionDataTask *task, NSError *error) 范例的块。
- 描述:这是请求失败后的回调块。当请求失败时,好比网络连接问题、服务器错误等,这个块会被调用。NSURLSessionDataTask 参数同样是表示当前请求任务的对象。NSError 参数包含了错误信息,可以通过查抄这个错误对象来确定请求失败的缘故起因,并举行相应的错误处置惩罚。
结语
在研究spotify时,发现AFNetworking在处置惩罚一些需要涉及到请求头和请求体的网络请求会非常方便,与headers和parameters参数有关,这些知识之后会再举行完善。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |