iOS:AFNetworking使用

本文详细介绍了AFNetworking框架的各种网络请求方法,包括GET、POST、文件上传和下载等操作,并提供了具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:

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;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值