提交
This commit is contained in:
160
QXLive/Network/QXRequest.h
Normal file
160
QXLive/Network/QXRequest.h
Normal file
@@ -0,0 +1,160 @@
|
||||
//
|
||||
// QXRequset.h
|
||||
// YSDTrucksProject
|
||||
//
|
||||
// Created by 党凯 on 2020/7/1.
|
||||
// Copyright © 2020 党凯. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
//无网络
|
||||
#define NOT_NETWORK_ERROR [NSError errorWithDomain:@"com.wufeng.Networking.ErrorDomain" code:-999 userInfo:@{NSLocalizedDescriptionKey:@"无网络"}]
|
||||
|
||||
typedef NS_ENUM(NSUInteger, NetworkMethod) {
|
||||
GET = 0,
|
||||
POST,
|
||||
PUT,
|
||||
DELETE,
|
||||
PATCH
|
||||
};
|
||||
typedef NS_ENUM(NSUInteger, RequestCachePolicy) {
|
||||
/** 正在刷新中的状态 */
|
||||
CacheDataThenLoad = 0, // 有缓存就先返回缓存,同步请求数据
|
||||
IgnoringLocalCacheData, // 忽略缓存,重新请求
|
||||
CacheDataElseLoad, // 有缓存就用缓存,没有缓存就重新请求(用于数据不变时)
|
||||
CacheDataDontLoad, // 有缓存就用缓存,没有缓存就不发请求,当做请求出错处理(用于离线模式)
|
||||
};
|
||||
typedef void (^NeQXRequsetSuccessBlock)(id responseObject); //成功Block
|
||||
typedef void (^NeQXRequsetCacheSuccessBlock)(id responseObject, BOOL isCache); //缓存成功Block
|
||||
typedef void (^NeQXRequsetFailedBlock)(NSError * error,NSString * msg,NSURLSessionDataTask * task);//失败Block
|
||||
typedef void (^NeQXRequsetProgressBlock)(float progress); //进度Block
|
||||
typedef void (^NetResponseCache)(id responseObject);
|
||||
typedef void (^QXDownloadCompletionHandler)(NSURLResponse *response,
|
||||
NSURL * filePath,
|
||||
NSError * error);
|
||||
|
||||
@interface QXRequset : NSObject
|
||||
+(instancetype _Nonnull )shareInstance;
|
||||
/**
|
||||
* 当前的网络状态
|
||||
*/
|
||||
@property (nonatomic, assign,readonly) AFNetworkReachabilityStatus AFNetWorkStatus;
|
||||
/**
|
||||
* 请求者
|
||||
*/
|
||||
@property (nonatomic, strong) AFHTTPSessionManager * _Nonnull sharedManager;
|
||||
|
||||
/**
|
||||
请求
|
||||
|
||||
@param urlString url
|
||||
@param parameters 参数
|
||||
@param type 请求类型
|
||||
@param policy 缓存策略
|
||||
@param success 成功
|
||||
@param cache 缓存
|
||||
@param fail 失败
|
||||
*/
|
||||
- (NSURLSessionTask*_Nullable)requestWithUrl:(NSString *_Nonnull)urlString
|
||||
parameters:(id _Nonnull)parameters
|
||||
type:(NetworkMethod)type
|
||||
cachePolicy:(RequestCachePolicy)policy
|
||||
success:(NeQXRequsetSuccessBlock _Nonnull)success
|
||||
cache:(NetResponseCache)cache
|
||||
failure:(NeQXRequsetFailedBlock _Nonnull)fail;
|
||||
/**
|
||||
* Get形式提交数据
|
||||
*
|
||||
* @param urlString Url
|
||||
* @param parameters 参数
|
||||
* @param success 成功Block
|
||||
* @param fail 失败Block
|
||||
*/
|
||||
- (NSURLSessionTask*_Nullable)getWithUrl:(NSString *_Nonnull)urlString
|
||||
parameters:(id _Nonnull)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock _Nonnull)success
|
||||
fail:(NeQXRequsetFailedBlock _Nonnull)fail;
|
||||
|
||||
|
||||
/**
|
||||
* Post形式提交数据
|
||||
*
|
||||
* @param urlString Url
|
||||
* @param parameters 参数
|
||||
* @param success 成功Block
|
||||
* @param fail 失败Block
|
||||
*/
|
||||
- (NSURLSessionTask*_Nonnull)postWithUrl:(NSString * _Nonnull)urlString
|
||||
parameters:(id _Nonnull)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock _Nonnull)success
|
||||
fail:(NeQXRequsetFailedBlock _Nonnull)fail;
|
||||
|
||||
/**
|
||||
* Put形式提交数据
|
||||
*
|
||||
* @param urlString Url
|
||||
* @param parameters 参数
|
||||
* @param success 成功Block
|
||||
* @param fail 失败Block
|
||||
*/
|
||||
- (NSURLSessionTask*_Nullable)putWithUrl:(NSString * _Nonnull)urlString
|
||||
parameters:(id _Nonnull)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock _Nonnull)success
|
||||
fail:(NeQXRequsetFailedBlock _Nonnull)fail;
|
||||
|
||||
/**
|
||||
* Delete形式提交数据
|
||||
*
|
||||
* @param urlString Url
|
||||
* @param parameters 参数
|
||||
* @param success 成功Block
|
||||
* @param fail 失败Block
|
||||
*/
|
||||
- (NSURLSessionTask*_Nullable)deleteWithUrl:(NSString *_Nonnull)urlString
|
||||
parameters:(id _Nonnull)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock _Nonnull)success
|
||||
fail:(NeQXRequsetFailedBlock _Nonnull)fail;
|
||||
/**
|
||||
* Patch形式提交数据
|
||||
*
|
||||
* @param urlString Url
|
||||
* @param parameters 参数
|
||||
* @param success 成功Block
|
||||
* @param fail 失败Block
|
||||
*/
|
||||
- (NSURLSessionTask*_Nullable)patchWithUrl:(NSString *_Nonnull)urlString
|
||||
parameters:(id _Nonnull)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock _Nonnull)success
|
||||
fail:(NeQXRequsetFailedBlock _Nonnull)fail;
|
||||
/**
|
||||
* POST上传图片
|
||||
*
|
||||
* @param urlString 上传地址
|
||||
* @param image 图片
|
||||
* @param parameters 参数
|
||||
* @param success 成功Block
|
||||
* @param fail 失败Block
|
||||
*/
|
||||
- (NSURLSessionTask*_Nullable)postUploadImageWithUrl:(NSString *_Nonnull)urlString
|
||||
image:(UIImage *_Nonnull)image
|
||||
parameters:(id _Nonnull)parameters
|
||||
progress:(NeQXRequsetProgressBlock _Nonnull )progress
|
||||
success:(NeQXRequsetSuccessBlock _Nullable )success
|
||||
fail:(NeQXRequsetFailedBlock _Nonnull )fail;
|
||||
|
||||
/**
|
||||
* 下载礼物
|
||||
*
|
||||
* @param url 礼物地址
|
||||
*/
|
||||
- (void)downloadVideoPlayerWithUrl:(NSString *_Nullable)url
|
||||
completion:(void (^_Nullable)(BOOL result, NSString * _Nonnull fileName))completion;
|
||||
@end
|
||||
|
||||
|
||||
535
QXLive/Network/QXRequest.m
Normal file
535
QXLive/Network/QXRequest.m
Normal file
@@ -0,0 +1,535 @@
|
||||
//
|
||||
// QXRequset.m
|
||||
// YSDTrucksProject
|
||||
//
|
||||
// Created by 党凯 on 2020/7/1.
|
||||
// Copyright © 2020 党凯. All rights reserved.
|
||||
//
|
||||
|
||||
#import "QXRequest.h"
|
||||
#import "QXFileManager.h"
|
||||
#import <YYCache/YYCache.h>
|
||||
#import "OpenUDID.h"
|
||||
static AFNetworkReachabilityStatus AFNetWorkStatus; //网络状态
|
||||
static NSInteger HTTP_LOGINLOSE_CODE = 301;
|
||||
static NSInteger HTTP_SUCCESS_CODE = 1;
|
||||
static NSInteger HTTP_ERROR_CODE = 0;
|
||||
|
||||
|
||||
@implementation QXRequset
|
||||
+(QXRequset *)shareInstance{
|
||||
static QXRequset *request = nil;
|
||||
static dispatch_once_t predicate;
|
||||
dispatch_once(&predicate, ^{
|
||||
request = [[QXRequset alloc] init];
|
||||
[self checkNetworkStatus];
|
||||
});
|
||||
return request;
|
||||
}
|
||||
- (AFHTTPSessionManager *)sharedManager {
|
||||
static AFHTTPSessionManager *manager = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
manager = [AFHTTPSessionManager manager];
|
||||
manager.responseSerializer = [AFJSONResponseSerializer serializer];
|
||||
manager.responseSerializer.acceptableContentTypes = [NSSet setWithArray:@[@"application/json",
|
||||
@"text/html",
|
||||
@"text/json",
|
||||
@"text/plain",
|
||||
@"text/javascript",
|
||||
@"text/xml",
|
||||
@"image/*",
|
||||
@"application/octet-stream",
|
||||
@"application/zip"]];
|
||||
manager.requestSerializer = [AFJSONRequestSerializer serializer];
|
||||
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
|
||||
// // 是否允许自签名证书(生产环境必须设为 NO)
|
||||
// securityPolicy.allowInvalidCertificates = YES;
|
||||
// // 是否验证证书域名是否匹配(强烈建议开启)
|
||||
// securityPolicy.validatesDomainName = NO;
|
||||
// // 加载本地证书
|
||||
// NSData *certData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"server1" ofType:@"cer"]];
|
||||
// securityPolicy.pinnedCertificates = [NSSet setWithObject:certData];
|
||||
//
|
||||
manager.securityPolicy = securityPolicy;
|
||||
manager.requestSerializer.timeoutInterval = 10;
|
||||
});
|
||||
return manager;
|
||||
}
|
||||
+ (void)checkNetworkStatus {
|
||||
AFNetWorkStatus = AFNetworkReachabilityStatusUnknown;
|
||||
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
|
||||
[manager startMonitoring];
|
||||
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
|
||||
switch (status) {
|
||||
case AFNetworkReachabilityStatusUnknown:
|
||||
{
|
||||
// 未知网络
|
||||
AFNetWorkStatus = AFNetworkReachabilityStatusUnknown;
|
||||
}
|
||||
break;
|
||||
case AFNetworkReachabilityStatusNotReachable:
|
||||
{
|
||||
// 没有网络
|
||||
AFNetWorkStatus = AFNetworkReachabilityStatusNotReachable;
|
||||
}
|
||||
break;
|
||||
case AFNetworkReachabilityStatusReachableViaWWAN:
|
||||
{
|
||||
// 手机自带网络,移动流量
|
||||
AFNetWorkStatus = AFNetworkReachabilityStatusReachableViaWWAN;
|
||||
}
|
||||
break;
|
||||
case AFNetworkReachabilityStatusReachableViaWiFi:
|
||||
{
|
||||
// WIFI
|
||||
AFNetWorkStatus = AFNetworkReachabilityStatusReachableViaWiFi;
|
||||
}
|
||||
}
|
||||
if (AFNetWorkStatus != AFNetworkReachabilityStatusNotReachable){
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:noticeUserLogin object:nil];
|
||||
}
|
||||
}];
|
||||
|
||||
}
|
||||
- (NSURLSessionTask*)getWithUrl:(NSString *)urlString
|
||||
parameters:(id)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock)success
|
||||
fail:(NeQXRequsetFailedBlock)fail
|
||||
{
|
||||
RequestCachePolicy policy = IgnoringLocalCacheData;
|
||||
if (needCache) {
|
||||
policy = CacheDataThenLoad;
|
||||
}
|
||||
return [self requestWithUrl:urlString parameters:parameters type:GET cachePolicy:policy success:success cache:success failure:fail];
|
||||
}
|
||||
- (NSURLSessionTask*)postWithUrl:(NSString *)urlString
|
||||
parameters:(id)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock)success
|
||||
fail:(NeQXRequsetFailedBlock)fail
|
||||
{
|
||||
RequestCachePolicy policy = IgnoringLocalCacheData;
|
||||
if (needCache) {
|
||||
policy = CacheDataThenLoad;
|
||||
}
|
||||
return [self requestWithUrl:urlString parameters:parameters type:POST cachePolicy:policy success:success cache:success failure:fail];
|
||||
}
|
||||
|
||||
- (NSURLSessionTask*)putWithUrl:(NSString *)urlString
|
||||
parameters:(id)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock)success
|
||||
fail:(NeQXRequsetFailedBlock)fail
|
||||
{
|
||||
RequestCachePolicy policy = IgnoringLocalCacheData;
|
||||
if (needCache) {
|
||||
policy = CacheDataThenLoad;
|
||||
}
|
||||
return [self requestWithUrl:urlString parameters:parameters type:PUT cachePolicy:policy success:success cache:nil failure:fail];
|
||||
}
|
||||
|
||||
|
||||
- (NSURLSessionTask*)deleteWithUrl:(NSString *)urlString
|
||||
parameters:(id)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock)success
|
||||
fail:(NeQXRequsetFailedBlock)fail
|
||||
{
|
||||
RequestCachePolicy policy = IgnoringLocalCacheData;
|
||||
if (needCache) {
|
||||
policy = CacheDataThenLoad;
|
||||
}
|
||||
return [self requestWithUrl:urlString parameters:parameters type:DELETE cachePolicy:policy success:success cache:nil failure:fail];
|
||||
}
|
||||
- (NSURLSessionTask*)patchWithUrl:(NSString *)urlString
|
||||
parameters:(id)parameters
|
||||
needCache:(BOOL)needCache
|
||||
success:(NeQXRequsetSuccessBlock)success
|
||||
fail:(NeQXRequsetFailedBlock)fail
|
||||
{
|
||||
RequestCachePolicy policy = IgnoringLocalCacheData;
|
||||
if (needCache) {
|
||||
policy = CacheDataThenLoad;
|
||||
}
|
||||
return [self requestWithUrl:urlString parameters:parameters type:PATCH cachePolicy:policy success:success cache:nil failure:fail];
|
||||
}
|
||||
- (NSURLSessionTask*)postUploadImageWithUrl:(NSString *)urlString
|
||||
image:(UIImage *)image
|
||||
parameters:(id)parameters
|
||||
progress:(NeQXRequsetProgressBlock)progress
|
||||
success:(NeQXRequsetSuccessBlock)success
|
||||
fail:(NeQXRequsetFailedBlock)fail
|
||||
{
|
||||
AFHTTPSessionManager *manager = [self sharedManager];
|
||||
if (AFNetWorkStatus == AFNetworkReachabilityStatusNotReachable) {
|
||||
if (fail)fail(NOT_NETWORK_ERROR,@"无网络",nil);
|
||||
return nil;
|
||||
}
|
||||
#warning 请求头添加
|
||||
///请求头
|
||||
NSDictionary *headers = @{};
|
||||
return [manager POST:urlString parameters:parameters headers:headers constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
|
||||
NSData *imageData = UIImagePNGRepresentation(image);
|
||||
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
|
||||
formatter.dateFormat = @"yyyyMMddHHmmss";
|
||||
NSString *str = [formatter stringFromDate:[NSDate date]];
|
||||
NSString *fileName = [NSString stringWithFormat:@"%@.jpg",str];
|
||||
[formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/jpg"];
|
||||
} progress:^(NSProgress * _Nonnull uploadProgress) {
|
||||
if (progress)progress(uploadProgress.fractionCompleted);
|
||||
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||
NSDictionary *dict = [self getResponseDictWith:responseObject urlString:urlString];
|
||||
if (success) {
|
||||
success(dict);
|
||||
}
|
||||
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
||||
if (fail){
|
||||
fail(error,error.description,task);
|
||||
};
|
||||
NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
|
||||
NSLog(@"失败返回 --- URL : %@ \n ---错误码 = %ld \n ---详细信息 : %@",urlString,(long)responses.statusCode,error);
|
||||
}];
|
||||
}
|
||||
- (NSURLSessionTask*)requestWithUrl:(NSString *)urlString
|
||||
parameters:(id)parameters
|
||||
type:(NetworkMethod)type
|
||||
cachePolicy:(RequestCachePolicy)policy
|
||||
success:(NeQXRequsetSuccessBlock)success
|
||||
cache:(NetResponseCache)cache
|
||||
failure:(NeQXRequsetFailedBlock)fail{
|
||||
|
||||
AFHTTPSessionManager *manager = [self sharedManager];
|
||||
///无网络直接返回失败
|
||||
if (AFNetWorkStatus == AFNetworkReachabilityStatusNotReachable) {
|
||||
if (fail)fail(NOT_NETWORK_ERROR,@"无网络",nil);
|
||||
return nil;
|
||||
}
|
||||
if (![urlString hasPrefix:@"http"] || ![urlString hasPrefix:@"https"]) {
|
||||
urlString = [NSString stringWithFormat:@"%@%@",ServerUrl,urlString];
|
||||
}
|
||||
NSLog(@"发起请求 --- URL : %@",urlString);
|
||||
|
||||
//缓存,用url拼接参数作为key
|
||||
YYCache *myCache = [YYCache cacheWithName:@"QXCache"];
|
||||
NSString *parString = parameters ? [parameters yy_modelToJSONString] : @"";
|
||||
NSString *cacheKey = [NSString stringWithFormat:@"%@%@", urlString, parString];
|
||||
|
||||
if (cache) {
|
||||
//获取缓存
|
||||
id object = [myCache objectForKey:cacheKey];
|
||||
switch (policy) {
|
||||
|
||||
//先返回缓存,同时请求
|
||||
case CacheDataThenLoad: {
|
||||
if (object)cache(object);
|
||||
break;
|
||||
}
|
||||
|
||||
//忽略本地缓存直接请求
|
||||
case IgnoringLocalCacheData: {
|
||||
break;
|
||||
}
|
||||
|
||||
//有缓存就返回缓存,没有就请求
|
||||
case CacheDataElseLoad: {
|
||||
if (object) {
|
||||
cache(object);
|
||||
return nil;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//有缓存就返回缓存,从不请求(用于没有网络)
|
||||
case CacheDataDontLoad: {
|
||||
if (object)cache(object);
|
||||
return nil;
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#warning 请求头添加
|
||||
///请求头
|
||||
NSDictionary *headers = @{};
|
||||
[manager.requestSerializer setValue:@"iOS" forHTTPHeaderField:@"system"];
|
||||
NSString *value = [OpenUDID value];
|
||||
[manager.requestSerializer setValue:value forHTTPHeaderField:@"deviceId"];
|
||||
NSString*appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
|
||||
[manager.requestSerializer setValue:appVersion forHTTPHeaderField:@"App-Version"];
|
||||
if ([QXGlobal shareGlobal].isLogin) {
|
||||
[manager.requestSerializer setValue:[QXGlobal shareGlobal].loginModel.token forHTTPHeaderField:@"token"];
|
||||
}
|
||||
switch (type) {
|
||||
case GET: {
|
||||
return [manager GET:urlString parameters:parameters headers:headers progress:^(NSProgress * _Nonnull downloadProgress) {
|
||||
|
||||
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||
|
||||
NSDictionary *dict = [self getResponseDictWith:responseObject urlString:urlString];
|
||||
int code = [dict[@"code"] intValue];
|
||||
if (code == HTTP_LOGINLOSE_CODE) {
|
||||
[[QXGlobal shareGlobal] logOut];
|
||||
NSString *msg = [NSString stringWithFormat:@"%@",dict[@"msg"]];
|
||||
fail(nil,msg,task);
|
||||
return;
|
||||
}
|
||||
if (code == HTTP_ERROR_CODE) {
|
||||
NSString *msg = [NSString stringWithFormat:@"%@",dict[@"msg"]];
|
||||
fail(nil,msg,task);
|
||||
return;
|
||||
}
|
||||
|
||||
if (success) {
|
||||
success(dict);
|
||||
}
|
||||
if (cache) {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
||||
if (policy != IgnoringLocalCacheData) {
|
||||
[myCache setObject:dict forKey:cacheKey];
|
||||
}
|
||||
});
|
||||
}
|
||||
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
||||
|
||||
if (fail){
|
||||
fail(error,error.description,task);
|
||||
};
|
||||
|
||||
NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
|
||||
NSLog(@"失败返回 --- URL : %@ \n ---错误码 = %ld \n ---详细信息 : %@",urlString,(long)responses.statusCode,error);
|
||||
}];
|
||||
}
|
||||
break;
|
||||
|
||||
case POST: {
|
||||
[manager.requestSerializer setValue:@"form-data" forHTTPHeaderField:@"Content-type"];
|
||||
return [manager POST:urlString parameters:nil headers:@{} constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
|
||||
for (NSString *key in [parameters allKeys]) {
|
||||
id value = [parameters objectForKey:key];
|
||||
if ([value isKindOfClass:[NSString class]]) {
|
||||
[formData appendPartWithFormData:[[parameters objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding] name:key];
|
||||
continue;
|
||||
}
|
||||
if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSMutableArray class]]) {
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[parameters objectForKey:key] options:(NSJSONWritingPrettyPrinted) error:nil];
|
||||
[formData appendPartWithFormData:jsonData name:key];
|
||||
continue;
|
||||
}
|
||||
if ([value isKindOfClass:[NSNumber class]]) {
|
||||
NSNumber *number = (NSNumber *)value;
|
||||
NSString *numberString = number.stringValue;
|
||||
NSData*stringData = [numberString dataUsingEncoding:NSUTF8StringEncoding];
|
||||
[formData appendPartWithFormData:stringData name:key];
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} progress:^(NSProgress * _Nonnull uploadProgress) {
|
||||
|
||||
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||
NSDictionary *dict = [self getResponseDictWith:responseObject urlString:urlString];
|
||||
int code = [dict[@"code"] intValue];
|
||||
if (code == HTTP_LOGINLOSE_CODE) {
|
||||
[[QXGlobal shareGlobal] logOut];
|
||||
NSString *msg = [NSString stringWithFormat:@"%@",dict[@"msg"]];
|
||||
fail(nil,msg,task);
|
||||
return;
|
||||
}
|
||||
if (code == HTTP_ERROR_CODE) {
|
||||
NSString *msg = [NSString stringWithFormat:@"%@",dict[@"msg"]];
|
||||
fail(nil,msg,task);
|
||||
return;
|
||||
}
|
||||
|
||||
if (success) {
|
||||
success(dict);
|
||||
}
|
||||
if (cache) {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
||||
if (policy != IgnoringLocalCacheData) {
|
||||
[myCache setObject:dict forKey:cacheKey];
|
||||
}
|
||||
});
|
||||
}
|
||||
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
||||
if (fail){
|
||||
fail(error,error.description,task);
|
||||
};
|
||||
|
||||
NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
|
||||
NSLog(@"失败返回 --- URL : %@ \n ---错误码 = %ld \n ---详细信息 : %@",urlString,(long)responses.statusCode,error);
|
||||
}];
|
||||
}
|
||||
break;
|
||||
|
||||
case PUT: {
|
||||
return [manager PUT:urlString parameters:parameters headers:headers success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||
|
||||
NSDictionary *dict = [self getResponseDictWith:responseObject urlString:urlString];
|
||||
if (success) {
|
||||
success(dict);
|
||||
}
|
||||
if (cache) {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
||||
if (policy != IgnoringLocalCacheData) {
|
||||
[myCache setObject:dict forKey:cacheKey];
|
||||
}
|
||||
});
|
||||
}
|
||||
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
||||
|
||||
if (fail){
|
||||
fail(error,error.description,task);
|
||||
};
|
||||
|
||||
NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
|
||||
NSLog(@"失败返回 --- URL : %@ \n ---错误码 = %ld \n ---详细信息 : %@",urlString,(long)responses.statusCode,error);
|
||||
}];
|
||||
}
|
||||
break;
|
||||
|
||||
case DELETE: {
|
||||
return [manager DELETE:urlString parameters:parameters headers:headers success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||
|
||||
NSDictionary *dict = [self getResponseDictWith:responseObject urlString:urlString];
|
||||
if (success) {
|
||||
success(dict);
|
||||
}
|
||||
if (cache) {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
||||
if (policy != IgnoringLocalCacheData) {
|
||||
[myCache setObject:dict forKey:cacheKey];
|
||||
}
|
||||
});
|
||||
}
|
||||
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
||||
|
||||
if (fail){
|
||||
fail(error,error.description,task);
|
||||
};
|
||||
|
||||
NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
|
||||
NSLog(@"失败返回 --- URL : %@ \n ---错误码 = %ld \n ---详细信息 : %@",urlString,(long)responses.statusCode,error);
|
||||
}];
|
||||
}
|
||||
break;
|
||||
|
||||
case PATCH: {
|
||||
return [manager PATCH:urlString parameters:parameters headers:headers success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||
|
||||
NSDictionary *dict = [self getResponseDictWith:responseObject urlString:urlString];
|
||||
if (success) {
|
||||
success(dict);
|
||||
}
|
||||
if (cache) {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
||||
if (policy != IgnoringLocalCacheData) {
|
||||
[myCache setObject:dict forKey:cacheKey];
|
||||
}
|
||||
});
|
||||
}
|
||||
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
||||
|
||||
if (fail){
|
||||
fail(error,error.description,task);
|
||||
};
|
||||
|
||||
NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
|
||||
NSLog(@"失败返回 --- URL : %@ \n ---错误码 = %ld \n ---详细信息 : %@",urlString,(long)responses.statusCode,error);
|
||||
}];
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
//对返回数据做处理
|
||||
-(NSDictionary*)getResponseDictWith:(id)responseObject urlString:(NSString*)urlString{
|
||||
NSDictionary *dictObj;
|
||||
if ([responseObject isKindOfClass:[NSDictionary class]]) {
|
||||
dictObj = responseObject;
|
||||
NSLog(@"成功返回 --- URL : %@ \n %@",urlString,responseObject);
|
||||
}else{
|
||||
NSString *responseJson = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
|
||||
dictObj = [responseJson jsonValueDecoded];
|
||||
NSLog(@"成功返回 --- URL : %@ \n %@",urlString,dictObj);
|
||||
}
|
||||
|
||||
return dictObj;
|
||||
}
|
||||
|
||||
|
||||
/// 下载视频
|
||||
- (void)downloadVideoPlayerWithUrl:(NSString *)url completion:(void (^)(BOOL result, NSString * fileName))completion {
|
||||
if (![url isExist]) {
|
||||
if (completion) {
|
||||
completion(NO, nil);
|
||||
}
|
||||
return;
|
||||
}
|
||||
NSString *path = [QXFileManager createLocalSourceVideoDirectory];
|
||||
NSString *fileNamePath = [path stringByAppendingPathComponent:url.lastPathComponent];
|
||||
if ([QXFileManager isExistsFileWithFilePath:fileNamePath]) {
|
||||
if (completion) {
|
||||
completion(YES, url.lastPathComponent);
|
||||
}
|
||||
return;
|
||||
}
|
||||
[self downloadDataWithUrl:url fileNamePath:fileNamePath localSourceDir:path completion:completion];
|
||||
}
|
||||
|
||||
/// 下载资源
|
||||
- (void)downloadDataWithUrl:(NSString *)url fileNamePath:(NSString *)fileNamePath localSourceDir:(NSString *)localSourceDir completion:(void (^)(BOOL, NSString * _Nullable))completion {
|
||||
if (![url isExist] || ![fileNamePath isExist] || ![localSourceDir isExist]) {
|
||||
if (completion) {
|
||||
completion(NO, nil);
|
||||
}
|
||||
return;
|
||||
}
|
||||
NSURLSessionTask *task = [self downloadApi:url filePath:localSourceDir progress:^(NSProgress * _Nonnull downloadProgress) {
|
||||
NSLog(@"downloadProgress == %@",downloadProgress);
|
||||
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
|
||||
if ([QXFileManager isExistsFileWithFilePath:fileNamePath]) {
|
||||
if (completion) {
|
||||
completion(YES, url.lastPathComponent);
|
||||
}
|
||||
}else {// 下载失败
|
||||
if (completion) {
|
||||
completion(NO, nil);
|
||||
}
|
||||
}
|
||||
}];
|
||||
[task resume];
|
||||
}
|
||||
|
||||
- (NSURLSessionTask *)downloadApi:(NSString *)url
|
||||
filePath: (NSString *)filePath
|
||||
progress:(nullable void (^)(NSProgress * _Nonnull))downloadProgress
|
||||
completionHandler: (QXDownloadCompletionHandler)completionHandler{
|
||||
return [self downloadApi:url
|
||||
filePath:filePath
|
||||
fileName:url.lastPathComponent
|
||||
progress:downloadProgress
|
||||
completionHandler:completionHandler];
|
||||
}
|
||||
|
||||
- (NSURLSessionTask *)downloadApi:(NSString *)url
|
||||
filePath:(NSString *)filePath
|
||||
fileName:(NSString *)fileName
|
||||
progress:(void (^)(NSProgress * _Nonnull))downloadProgress
|
||||
completionHandler:(QXDownloadCompletionHandler)completionHandler {
|
||||
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
|
||||
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
|
||||
manager.securityPolicy = policy;
|
||||
NSURLRequest *requst = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
|
||||
return [manager downloadTaskWithRequest:requst
|
||||
progress:downloadProgress
|
||||
destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
|
||||
NSString *realPath = [filePath stringByAppendingPathComponent:fileName];
|
||||
return [NSURL fileURLWithPath:realPath];
|
||||
} completionHandler:completionHandler];
|
||||
}
|
||||
@end
|
||||
Reference in New Issue
Block a user