OC 简单封装AFNetworking实现get、post、图片上传

本文介绍了如何在Objective-C项目中使用AFNetworking框架进行网络请求的简单封装,包括GET、POST方法及图片上传功能。

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

1.将AFNetworking框架导入到项目中,地址如下:AFNetworking
2.创建管理类RequestManager:

@interface RequestManager : NSObject
+ (instancetype)shareManager;
/**get请求*/
- (void)getRequest:(NSString *)url
        parameters:(id)parameters
           success:(void(^)(id responseObject))success
           failure:(void(^)(NSError *error))failure;
/**post请求*/
- (void)postRequest:(NSString *)url
         parameters:(id)parameters
            success:(void(^)(id responseObject))success
            failure:(void(^)(NSError *error))failure;
/**图片上传*/
- (void)uploadImages:(NSString *)url
              images:(NSArray *)images
          parameters:(id)parameters
            progress:(void(^)(NSProgress *progress))progress
             success:(void(^)(id responseObject))success
             failure:(void(^)(NSError *error))failure;
@end
#import "RequestManager.h"

@implementation RequestManager
+ (instancetype)shareManager {
    static RequestManager *rm = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        rm = [[RequestManager alloc]init];
    });
    return rm;
}
#pragma mark - 设置请求的配置
- (void)setRequestWithManager:(AFHTTPSessionManager *)manager {
    //30s超时
    manager.requestSerializer.timeoutInterval = 30;
    [manager.securityPolicy setAllowInvalidCertificates:YES];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript", nil];
    //设置请求头
    [manager.requestSerializer setValue:@"utf-8" forHTTPHeaderField:@"Content-Type"];
}
#pragma mark - get请求
- (void)getRequest:(NSString *)url parameters:(id)parameters success:(void (^)(id _Nonnull))success failure:(void (^)(NSError * _Nonnull))failure {
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [self setRequestWithManager:manager];
    [manager GET:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(error);
    }];
}
#pragma mark - post请求
- (void)postRequest:(NSString *)url parameters:(id)parameters success:(void (^)(id _Nonnull))success failure:(void (^)(NSError * _Nonnull))failure {
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [self setRequestWithManager:manager];
    [manager POST:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(error);
    }];
}
#pragma mark - 图片上传
- (void)uploadImages:(NSString *)url images:(NSArray *)images parameters:(id)parameters progress:(void (^)(NSProgress * _Nonnull))progress success:(void (^)(id _Nonnull))success failure:(void (^)(NSError * _Nonnull))failure{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    [self setRequestWithManager:manager];
    [manager POST:url parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        for (UIImage *image in images) {
            //压缩图片
            NSData *data = UIImageJPEGRepresentation(image, 0.4);
            //多张图片是需要在name中加“[]”,单张上传时不用
            [formData appendPartWithFileData:data name:@"file[]" fileName:[NSString stringWithFormat:@"%@.jpg",[NSDate date]] mimeType:@"image/jpeg"];
            
        }
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        progress(uploadProgress);
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(error);
    }];
}
@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值