说明:
AFNetworking是个网络请求框架
使用:
一、创建请求:
通用请求创建方法:
/*
创建URLRequest:GET或POST
requestType:GET 或 POST
urlStr:url字符串
body:请求体,GET方式传nil
*/
- (NSMutableURLRequest *)getRequestByType:(NSString *)requestType taskType:(NSInteger)taskType urlStr:(NSString *)urlStr body:(NSDictionary *)body{
switch (taskType) {
case 2://json
return [[AFJSONRequestSerializer serializer] requestWithMethod:requestType URLString:urlStr parameters:body error:nil];
}
//其他普通方式
return [[AFHTTPRequestSerializer serializer] requestWithMethod:requestType URLString:urlStr parameters:body error:nil];
}
1.GET请求:
/*
1.GET
*/
- (void)doGet:(NSString *)urlStr{
//1.创建URLRequest:GET
NSMutableURLRequest *request = [self getRequestByType:@"GET" taskType:0 urlStr:urlStr body:nil];
//2.执行请求
[self doRequest:request taskType:0 filePath:nil];
}
2.POST: key=value方式:
/*
1.POST: key=value方式
*/
- (void)doPostByKeyValue:(NSString *)urlStr keyValue:(NSDictionary *)keyValue{
//1.创建URLRequest:POST key=value方式
NSMutableURLRequest *request = [self getRequestByType:@"POST" taskType:1 urlStr:urlStr body:keyValue];
//2.执行请求
[self doRequest:request taskType:1 filePath:nil];
}
3.POST: json方式:
/*
1.POST: json方式
*/
- (void)doPostByKeyValue:(NSString *)urlStr json:(NSDictionary *)json{
//1.创建URLRequest:POST json方式
NSMutableURLRequest *request = [self getRequestByType:@"POST" taskType:2 urlStr:urlStr body:json];
//2.执行请求
[self doRequest:request taskType:2 filePath:nil];
}
4.文件下载:
/*
1.文件下载
*/
- (void)downloadFile:(NSString *)urlStr{
//1.创建URLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
//2.执行请求
[self doRequest:request taskType:3 filePath:nil];
}
5.文件上传:
/*
1.文件上传
*/
- (void)uploadFile:(NSString *)urlStr filePath:(NSString *)filePath{
//1.创建URLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
//2.执行请求
[self doRequest:request taskType:4 filePath:filePath];
}
6.文件上传2:
/*
1.文件上传2
*/
- (void)uploadMultiFile:(NSString *)urlStr filePath:(NSString *)filePath fileName:(NSString *)fileName mimeType:(NSString *)mimeType{
//1.创建URLRequest
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileURL:[NSURL fileURLWithPath:filePath] name:@"file" fileName:fileName mimeType:mimeType error:nil];
} error:nil];
//2.执行请求
[self doRequest:request taskType:5 filePath:nil];
}
二、执行网络请求:
1.创建Task:
(1)创建普通Task:
/*
创建Task:普通Task
*/
- (NSURLSessionTask *)createTask:(NSURLRequest *)request manager:(AFURLSessionManager *)manager{
//创建Task
NSURLSessionDataTask *task = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
//有错误则返回
if (error) {
return;
}
//处理成功的数据:json
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
}];
return task;
}
(2)创建下载Task:
/*
创建Task:下载Task
*/
- (NSURLSessionTask *)createDownloadTask:(NSURLRequest *)request manager:(AFURLSessionManager *)manager{
//创建任务
NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSURL *path = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
return [path URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
//下载完成
}];
return task;
}
(3)创建上传Task:
/*
创建Task:上传Task
*/
- (NSURLSessionTask *)createUploadTask:(NSURLRequest *)request manager:(AFURLSessionManager *)manager filePath:(NSString *)filePath{
//创建任务
NSURLSessionUploadTask *task = nil;
if(filePath == nil){
task = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress *uploadProgress) {
//进度更新,当前为子线程
}
completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
//有错误则返回
if (error) {
return;
}
//处理成功的数据
}];
} else {
NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
task = [manager uploadTaskWithRequest:request fromFile:fileUrl progress:^(NSProgress *uploadProgress) {
//进度更新,当前为子线程
} completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
//有错误则返回
if (error) {
return;
}
//处理成功的数据
}];
}
return task;
}
2.执行网络请求:
/*
2.执行网络请求
*/
- (void)doRequest:(NSURLRequest *)request taskType:(NSInteger)taskType filePath:(NSString *)filePath{
//1.创建SessionConfiguration
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
//2.创建SessionManager
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:config];
//允许访问所有HTTPS URL
[self setAllowSSL:manager];
//3.创建Task
NSURLSessionTask *task = nil;
switch (taskType) {
case 0:
case 1:
case 2:
//创建普通Task
task = [self createTask:request manager:manager];
break;
case 3:
//创建下载Task
task = [self createDownloadTask:request manager:manager];
break;
case 4:
case 5:
//创建上传Task
task = [self createUploadTask:request manager:manager filePath:filePath];
break;
}
//4.执行请求
[task resume];
}
三、设置SSL:
1.允许访问所有HTTPS URL:
允许访问所有HTTPS URL
*/
- (void)setAllowSSL:(AFURLSessionManager *)manager{
manager.securityPolicy.allowInvalidCertificates = YES;
}