iOS AFNetworking简介

1. AFNetworking

AFNetworking是一个轻量级的iOS网络通信类库,让网络通信功能的实现变得十分简单。

在Podfile中安装

pod 'AFNetworking'

导入AFNetworking

#import "AFNetworking.h"

AFNetworking下载地址:https://github.com/AFNetworking/AFNetworking

2. AFHTTPSessionManager

AFHTTPSessionManager提供了各种请求方式,并支持https格式

self.sessionManager = [AFHTTPSessionManager manager];
//无条件的信任服务器上的证书
AFSecurityPolicy *securityPolicy =  [AFSecurityPolicy defaultPolicy];
// 客户端是否信任非法证书
securityPolicy.allowInvalidCertificates = YES;
// 是否在证书域字段中验证域名
securityPolicy.validatesDomainName = NO;
self.sessionManager.securityPolicy = securityPolicy;

3. 请求类型

AFHTTPRequestSerializer是请求类型,常用的子类型是AFJSONRequestSerializer。常用的参数和方法,

// 超时时间
@property (nonatomic, assign) NSTimeInterval timeoutInterval;

// 设置协议头信息
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;

Json类型请求

AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];
requestSerializer.timeoutInterval = THIRD_TIMEOUT;
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
self.sessionManager.requestSerializer = requestSerializer;

FormData类型请求

AFHTTPRequestSerializer *requestSerializer = [AFHTTPRequestSerializer serializer];
requestSerializer.timeoutInterval = THIRD_TIMEOUT;
[requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
self.sessionManager.requestSerializer = requestSerializer;

4. 请求方式

4.1 GET请求

GET请求

// 方法一
[self.sessionManager GET:requestUrl parameters:@{} headers:nil progress:nil
       success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"responseObject = %@", responseObject);            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"failure");
        }];

// 方法二
NSMutableURLRequest *request = [self.sessionManager.requestSerializer requestWithMethod:@"GET" URLString:requestUrl parameters:@{} error:nil];
NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
    if (error) {
        NSLog(@"failure");
    } else {
        NSLog(@"responseObject = %@", responseObject);
    }
}];
[task resume];

4.2 POST请求

POST请求

[self.sessionManager POST:requestUrl parameters:@{} headers:nil progress:nil
     success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

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

FormData请求

NSMutableURLRequest *request = [self.sessionManager.requestSerializer requestWithMethod:@"POST" URLString:requestUrl parameters:nil error:nil];
[request setHTTPBody:body];

NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        if (error) {
        } else {
        }
    }];
[task resume];

4. 3 POST上传文件

POST上传文件

[self.sessionManager POST:requestUrl parameters:@{} headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
                // 上传字符串
                [formData appendPartWithFormData:data name:key];
                // 上传文件
                [formData appendPartWithFileData:data name:name fileName:filename mimeType:@"application/octet-stream"];
                // 上传图片
                [formData appendPartWithFileData:data name:name fileName:fileName mimeType:@"image/png"];
                
            }
        } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        }];

4. 4 GET下载文件

下载文件

NSMutableURLRequest *request = [self.sessionManager.requestSerializer requestWithMethod:@"GET" URLString:requestUrl parameters:@{} error:nil];
NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        if (error) {
        } else {
        }
    }];
[task resume];

5. 返回类型

通过AFHTTPResponseSerializeracceptableContentTypes参数,可以设置返回类型

self.sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
// 返回json格式字符串
self.sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", nil];
// 返回文件
self.sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/octet-stream", @"application/pdf", nil];
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AFNetworking是一个基于Objective-C语言的iOS网络请求框架,它提供了一系列方便的API,帮助开发者快速地进行网络请求并处理响应内容。其原理是基于NSURLConnection和NSURLSession建立的网络请求,通过对网络请求的封装,提供了比原生API更加便捷的操作方式。 常用操作包括: 1. 发起网络请求:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的GET、POST等方法,可以方便地发起网络请求。 2. 设置请求参数:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的setParameterEncoding方法或AFHTTPRequestSerializer类的setQueryStringSerializationWithStyle方法,可以设置请求参数的编码格式。 3. 设置请求头:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的setValue:forHTTPHeaderField方法,可以设置请求头信息。 4. 处理响应数据:使用AFHTTPRequestOperation类的completionBlock或AFHTTPSessionManager类的dataTaskWithRequest:completionHandler方法,可以处理请求响应数据。 5. 下载文件:使用AFHTTPRequestOperation类的setDownloadProgressBlock和setCompletionBlockWithSuccess方法或AFHTTPSessionManager类的downloadTaskWithRequest:progress:destination:completionHandler方法,可以实现文件下载功能。 6. 上传文件:使用AFHTTPRequestOperationManager或AFHTTPSessionManager类的POST方法和AFHTTPRequestSerializer类的multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock方法,可以实现文件上传功能。 总体来说,AFNetworking提供了丰富的API和良好的封装,使得iOS开发者能够更加方便地进行网络请求和处理响应数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值