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. 返回类型
通过AFHTTPResponseSerializer
的acceptableContentTypes
参数,可以设置返回类型
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];