iOS 对afnetworking简单封装

对AFnetworking网络请求框架简单封装
声明

#import <Foundation/Foundation.h>

@interface DZC_Request_Mode : NSObject
//检测网络状态
+ (void)netWorkStatusWith:(NSString *)str success:(void(^)(long statue))statue;

//JSON方式获取数据
+ (void)JSONDataWithUrl:(NSString *)url success:(void (^)(id json))success fail:(void (^)(NSError *))fail;
//xml方式获取数据
+ (void)XMLDataWithUrl:(NSString *)urlStr success:(void (^)(id xml))success fail:(void (^)())fail ;
//post提交json数据
+ (void)postJSONWithUrl:(NSString *)urlStr parameters:(id)parameters success:(void (^)(id responseObject))success fail:(void (^)(NSError *err))fail ;
//下载文件
+ (void)sessionDownloadWithUrl:(NSString *)urlStr success:(void (^)(NSURL *fileURL))success fail:(void (^)())fail;
//文件上传-自定义上传文件名
+ (void)postUploadWithUrl:(NSString *)urlStr fileUrl:(NSURL *)fileURL fileName:(NSString *)fileName fileType:(NSString *)fileTye progress:(void(^)())progress success:(void (^)(id responseObject))success fail:(void (^)())fail;
//文件上传-随机生成文件名
+ (void)postUploadWithUrl:(NSString *)urlStr fileUrl:(NSURL *)fileURL progress:(void(^)())progress success:(void (^)(id responseObject))success fail:(void (^)())fail  ;
//处理服务器返回的数据
+(NSDictionary *)handleModleData:(NSData *)_data;
//获取token
+(void)TokenDataWithUrl:(NSString *)url success:(void(^)(id token))success fail:(void(^)(NSString *fail))fail;
//增加Header属性
+(AFHTTPSessionManager *)addHeader;
@end```

**实现**

import “DZC_Request_Mode.h”

@interface DZC_Request_Mode ()

@end
@implementation DZC_Request_Mode
+(void)netWorkStatusWith:(NSString *)str success:(void (^)(long))statue
{
[[AFNetworkReachabilityManager sharedManager] startMonitoring];

// 检测网络连接的单例,网络变化时的回调方法
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    DLog(@"%ld", (long)status);
    statue((long)status);

}];

}
+(void)netWorkStatus
{
/**
AFNetworkReachabilityStatusUnknown = -1, // 未知
AFNetworkReachabilityStatusNotReachable = 0, // 无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3G 花钱
AFNetworkReachabilityStatusReachableViaWiFi = 2, // WiFi
*/
// 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring
[[AFNetworkReachabilityManager sharedManager] startMonitoring];

// 检测网络连接的单例,网络变化时的回调方法
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    DLog(@"%ld", (long)status);

}];

}
+(void)JSONDataWithUrl:(NSString *)url success:(void (^)(id))success fail:(void (^)(NSError *fail))fail
{

AFHTTPSessionManager *manager = [self addHeader];


manager.responseSerializer=[AFHTTPResponseSerializer serializer];

// 网络访问是异步的,回调是主线程的,因此程序员不用管在主线程更新UI的事情

[manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {


} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        DLog(@"%@",responseObject);
        NSDictionary *dict=[self handleModleData:responseObject];
        if (dict)
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                success(dict);//将服务器返回的数字以字典的形式传给控制器
            });

        }


    });




} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    fail(error);//请求出错

}];

}
//同步获取token数据
+(void)TokenDataWithUrl:(NSString )url success:(void (^)(id))success fail:(void (^)(NSString ))fail
{
NSURL *URL=[NSURL URLWithString:url];
NSURLRequest *request=[[NSURLRequest alloc]initWithURL:URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];

//request=[DZCAddHeader UrlAddHeader:request];//增加header

NSData *data1= [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if (data1!=nil)
{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    docDir=[docDir stringByAppendingPathComponent:@"token.txt"];


    NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data1 options:NSJSONReadingMutableLeaves error:nil];

    [dict writeToFile:docDir atomically:YES];
    DLog(@"%@",dict);

    DLog(@"%@",[dict objectForKey:@"data"]);


    NSString *jiemiStr=[DzcDES DecodeBase64:[dict objectForKey:@"data"]];
    DLog(@"解密后字符串%@---%@",jiemiStr,docDir);
    NSDictionary *jiemidict=[DzcDES dictionaryWithJsonString:jiemiStr];
    DLog(@"输出明文数据字典%@",jiemidict);
    [[NSUserDefaults standardUserDefaults]removeObjectForKey:@"token"];
    DZCUiapplication *dzc=[DZCUiapplication shareApplication];
    dzc.Requesthost=[jiemidict valueForKey:@"Host"];
    dzc.requestHosts=[jiemidict objectForKey:@"Hosts"];
    //dzc.Requesthost=@"cache4.video.v.zhuovi.cn";
    [[NSUserDefaults standardUserDefaults]setObject:[jiemidict valueForKey:@"Token"] forKey:@"token"];
    [[NSUserDefaults standardUserDefaults]setObject:dzc.Requesthost forKey:@"requestHost"];
    if ([[dict valueForKey:@"state"]isEqualToString:@"success"])
    {
        success([dict valueForKey:@"state"]);
    }
    else
    {
        fail([dict valueForKey:@"msg"]);
    }

}
else
{
    [[NSUserDefaults standardUserDefaults]setValue:@"7C26642A4F204DF48791F8C2B776D046" forKey:@"token"];
}

}
+(void)XMLDataWithUrl:(NSString *)urlStr success:(void (^)(id))success fail:(void (^)())fail
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

// 返回的数据格式是XML

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

//NSDictionary *dict = @{@"format": @"xml"};
// 网络访问是异步的,回调是主线程的,因此程序员不用管在主线程更新UI的事情
[manager GET:urlStr parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {


} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    DLog(@"xml:%@",responseObject);
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        DLog(@"%@",str);
        NSDictionary *dict=[DzcDES dictionaryWithJsonString:str];
        if ([[dict objectForKey:@"state"]isEqualToString:@"success"])
        {
            NSString * s=[dict valueForKey:@"data"];
            s=[DzcDES DecodeBase64:s];
            dispatch_async(dispatch_get_main_queue(), ^{
                success(s);

            });
        }
    });

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

    fail();
}];

}
+(void)postJSONWithUrl:(NSString *)urlStr parameters:(id)parameters success:(void (^)(id))success fail:(void (^)(NSError *err))fail
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 设置请求格式
// manager.requestSerializer = [AFJSONRequestSerializer serializer];
// 设置返回格式
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:urlStr parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSDictionary *dict= [self handleModleData:responseObject];
    DLog(@"JSON:%@",responseObject);
    success(dict);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    DLog(@"%@",error);
    fail(error);

}];

}
//下载文件
+(void)sessionDownloadWithUrl:(NSString )urlStr success:(void (^)(NSURL ))success fail:(void (^)())fail
{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:urlStr];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    //NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
    // 指定下载文件保存的路径
    //        NSLog(@"%@ %@", targetPath, response.suggestedFilename);
    // 将下载文件保存在缓存路径中
    NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    NSString *path = [cacheDir stringByAppendingPathComponent:response.suggestedFilename];

    // URLWithString返回的是网络的URL,如果使用本地URL,需要注意
    //        NSURL *fileURL1 = [NSURL URLWithString:path];
    NSURL *fileURL = [NSURL fileURLWithPath:path];

    //        NSLog(@"== %@ |||| %@", fileURL1, fileURL);
    if (success) {
        success(fileURL);
    }


    return fileURL;//[documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    NSLog(@"File downloaded to: %@", filePath);
    if (error)
    {
        fail(error);
    }
}];
[downloadTask resume];

}
//文件上传-自定义上传文件名
+(void)postUploadWithUrl:(NSString )urlStr fileUrl:(NSURL )fileURL fileName:(NSString )fileName fileType:(NSString )fileTye progress:(void(^)())progress success:(void (^)(id))success fail:(void (^)())fail
{

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    [formData appendPartWithFileURL:fileURL name:@"file" fileName:fileName mimeType:fileTye error:nil];
} error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
              uploadTaskWithStreamedRequest:request
              progress:^(NSProgress * _Nonnull uploadProgress) {
                  // This is not called back on the main queue.
                  // You are responsible for dispatching to the main queue for UI updates
                  dispatch_async(dispatch_get_main_queue(), ^{
                      progress(uploadProgress.fractionCompleted);
                      //Update the progress view
                      //[progressView setProgress:uploadProgress.fractionCompleted];
                  });
              }
              completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                  if (error) {
                      NSLog(@"Error: %@", error);
                      fail(error);
                  } else {
                      NSLog(@"%@ %@", response, responseObject);
                      success(responseObject);
                  }
              }];

[uploadTask resume];

}
//文件上传-随机生成文件名
+(void)postUploadWithUrl:(NSString )urlStr fileUrl:(NSURL )fileURL progress:(void(^)())progress success:(void (^)(id))success fail:(void (^)())fail
{

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

    [formData appendPartWithFileURL:fileURL name:@"fileupdata" error:nil];
} error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
              uploadTaskWithStreamedRequest:request
              progress:^(NSProgress * _Nonnull uploadProgress) {
                  // This is not called back on the main queue.
                  // You are responsible for dispatching to the main queue for UI updates
                  dispatch_async(dispatch_get_main_queue(), ^{
                      progress(uploadProgress.fractionCompleted);
                      //Update the progress view
                      //[progressView setProgress:uploadProgress.fractionCompleted];
                  });
              }
              completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                  if (error) {
                      NSLog(@"Error: %@", error);
                      fail(error);
                  } else {
                      NSLog(@"%@ %@", response, responseObject);
                      success(responseObject);
                  }
              }];

[uploadTask resume];

}
//将服务器返回的数据转变成字典对象
+(NSDictionary )handleModleData:(NSData )_data
{

NSString *str=[[NSString alloc]initWithData:_data encoding:NSUTF8StringEncoding];

NSDictionary *dict=[DzcDES dictionaryWithJsonString:str];
DLog(@"handleModleData%@",dict);
return dict;
/*
if ([[dict valueForKey:@"state"]isEqualToString:@"success"]&&![[dict valueForKey:@"data"]isEqualToString:@""])
{

    str=[dict objectForKey:@"data"];        
    str=[DzcDES jiemiString:str];
    str=[DzcDES DecodeBase64:str];
    DLog(@"数据请求成功%@",str);
    dict=[DzcDES dictionaryWithJsonString:str];

    if (dict)
    {
        DLog(@"%@",dict);
        return dict;
    }
    else
    {
        return dict;
    }

}
else
{
    return dict;
}
 */

}
//增加Header属性
+(AFHTTPSessionManager *)addHeader
{

AFHTTPSessionManager *manger=[AFHTTPSessionManager manager];
DZCUiapplication *dzc=[DZCUiapplication shareApplication];


[manger.requestSerializer setValue:[DzcDES getAppVersion] forHTTPHeaderField:@"AppUserVer"];
[manger.requestSerializer setValue:@"1111111111111" forHTTPHeaderField:@"AppUserSessionID"];

if ([dzc.Phone isEqualToString:@""])
{

    [manger.requestSerializer setValue:@"" forHTTPHeaderField:@"AppUserPhone"];
}
else
{

     [manger.requestSerializer setValue:dzc.Phone forHTTPHeaderField:@"AppUserPhone"];
}


[manger.requestSerializer setValue:[DzcDES getIdentifierStr] forHTTPHeaderField:@"AppUserIEME"];
if ([dzc.ID isEqualToString:@""])
{

    [manger.requestSerializer setValue:@"" forHTTPHeaderField:@"AppUserID"];
}
else
{

    [manger.requestSerializer setValue:dzc.ID forHTTPHeaderField:@"AppUserID"];
}


[manger.requestSerializer setValue:[DzcDES getUserphoneModel] forHTTPHeaderField:@"AppUserOS"];
[manger.requestSerializer setValue:[DzcDES getUserPhoneVersion] forHTTPHeaderField:@"AppUserModal"];
[manger.requestSerializer setValue:[DzcDES macaddress] forHTTPHeaderField:@"AppUserMac"];
[manger.requestSerializer setValue:AppUserAppID forHTTPHeaderField:@"AppUserAppID"];

return manger;

}
@end
“`

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
缓存策略 typedef NS_ENUM(NSUInteger, YBCacheType){ YBCacheTypeReturnCacheDataThenLoad = 0,///< 有缓存就先返回缓存,同步请求数据 YBCacheTypeReloadIgnoringLocalCacheData, ///< 忽略缓存,重新请求 YBCacheTypeReturnCacheDataElseLoad,///< 有缓存就用缓存,没有缓存就重新请求(用于数据不变时) YBCacheTypeReturnCacheDataDontLoad,///< 有缓存就用缓存,没有缓存就不发请求,当做请求出错处理(用于离线模式) YBCacheTypeReturnCacheDataExpireThenLoad///< 有缓存就用缓存,如果过期了就重新请求 没过期就不请求 }; //get请求 - (void)test_get { NSString *url = @"http://www.baidu.com"; NSDictionary *params = @{@"i":@"1"}; [YBHttpTool get:url params:params success:^(NSDictionary *obj) { //成功 } failure:^(NSError *error) { //失败 }]; } //get带缓存的请求 - (void)test_get_cache { NSString *url = @"http://www.baidu.com"; NSDictionary *params = @{@"i":@"1"}; [YBHttpTool get:url params:params cacheType:YBCacheTypeReturnCacheDataThenLoad success:^(NSDictionary *obj) { //成功 } failure:^(NSError *error) { //失败 }]; } //post请求带缓存 - (void)test_post_cache { NSString *url = @"http://www.baidu.com"; NSDictionary *params = @{@"i":@"1"}; [YBHttpTool post:url params:params cacheType:YBCacheTypeReturnCacheDataThenLoad success:^(NSDictionary *obj) { //成功 } failure:^(NSError *error) { //失败 }]; } //上传单张图片 - (void)test_upload_image { UIImage *image = [UIImage imageNamed:@"1"]; NSData *data = UIImageJPEGRepresentation(image, 0.5); [YBHttpTool uploadImageWithImage:data success:^(NSDictionary *obj) { //上传成功 } failure:^(NSError *error) { //上传失败 }]; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yijianliuxiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值