Files
mier_ios/SweetParty/Expand/NetWork/MLNetWorkHelper.m

530 lines
22 KiB
Mathematica
Raw Permalink Normal View History

2025-08-11 10:43:19 +08:00
//
// MLNetWorkHelper.m
// HuiBao
//
// Created by on 2017/11/22.
// Copyright © 2017 . All rights reserved.
//
#import "MLNetWorkHelper.h"
#import "Global.h"
@implementation MLNetWorkHelper
static BOOL _isOpenLog; //
static NSMutableArray *_allSessionTask;
static AFHTTPSessionManager *_sessionManager;
#pragma mark -
+ (void)networkStatusWithBlock:(MLNetworkStatus)networkStatus {
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
networkStatus ? networkStatus(MLNetworkStatusUnknown) : nil;
if (_isOpenLog) MYLog(@"未知网络");
break;
case AFNetworkReachabilityStatusNotReachable:
networkStatus ? networkStatus(MLNetworkStatusNotReachable) : nil;
if (_isOpenLog) MYLog(@"无网络");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
networkStatus ? networkStatus(MLNetworkStatusReachableViaWWAN) : nil;
if (_isOpenLog) MYLog(@"手机自带网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
networkStatus ? networkStatus(MLNetworkStatusReachableViaWiFi) : nil;
if (_isOpenLog) MYLog(@"WIFI");
break;
}
}];
}
+ (BOOL)isNetwork {
return [AFNetworkReachabilityManager sharedManager].reachable;
}
+ (BOOL)isWWANNetwork {
return [AFNetworkReachabilityManager sharedManager].reachableViaWWAN;
}
+ (BOOL)isWiFiNetwork {
return [AFNetworkReachabilityManager sharedManager].reachableViaWiFi;
}
+ (void)openLog {
_isOpenLog = YES;
}
+ (void)closeLog {
_isOpenLog = NO;
}
+ (void)cancelAllRequest {
//
@synchronized(self) {
[[self allSessionTask] enumerateObjectsUsingBlock:^(NSURLSessionTask *_Nonnull task, NSUInteger idx, BOOL * _Nonnull stop) {
[task cancel];
}];
[[self allSessionTask] removeAllObjects];
}
}
+ (void)cancelRequestWithURL:(NSString *)URL {
if (!URL) { return; }
@synchronized (self) {
[[self allSessionTask] enumerateObjectsUsingBlock:^(NSURLSessionTask *_Nonnull task, NSUInteger idx, BOOL * _Nonnull stop) {
if ([task.currentRequest.URL.absoluteString hasPrefix:URL]) {
[task cancel];
[[self allSessionTask] removeObject:task];
*stop = YES;
}
}];
}
}
#pragma mark - GET
+ (NSURLSessionTask *)GET:(NSString *)URL
parameters:(id)parameters
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure {
return [self GET:URL parameters:parameters responseCache:nil success:success failure:failure];
}
#pragma mark - POST
+ (NSURLSessionTask *)POST:(NSString *)URL
parameters:(id)parameters
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure {
return [self POST:URL parameters:parameters responseCache:nil success:success failure:failure];
}
#pragma mark - GET
+ (NSURLSessionTask *)GET:(NSString *)URL
parameters:(id)parameters
responseCache:(MLHttpRequestCache)responseCache
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure {
//
responseCache!=nil ? responseCache([MLNetworkCache httpCacheForURL:URL parameters:parameters]) : nil;
// //http://zkw.org.cn/api/Login/getCode
// if ([URL isEqualToString:@"http://zkw.org.cn/api/Login/getCode"]) {
// _sessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
// _sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
// }else{
// _sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
// _sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
// }
NSURLSessionTask *sessionTask = [_sessionManager GET:URL parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (_isOpenLog) {
// if ([URL isEqualToString:@"http://zkw.org.cn/api/Login/getCode"]) {
// LJLog(@"responseObject = %@",[NSString stringWithFormat:@"%@",responseObject]);
// }else{
// LJLog(@"responseObject = %@",responseObject);
// }
MYLog(@"responseObject = %@",responseObject);
}
[[self allSessionTask] removeObject:task];
success ? success(responseObject) : nil;
//
responseCache!=nil ? [MLNetworkCache setHttpCache:responseObject URL:URL parameters:parameters] : nil;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (_isOpenLog) {MYLog(@"error = %@",error);}
[[self allSessionTask] removeObject:task];
failure ? failure(error) : nil;
}];
// sessionTask
sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ;
return sessionTask;
}
#pragma mark - POST
+ (NSURLSessionTask *)POST:(NSString *)URL
parameters:(id)parameters
responseCache:(MLHttpRequestCache)responseCache
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure {
//
responseCache!=nil ? responseCache([MLNetworkCache httpCacheForURL:URL parameters:parameters]) : nil;
NSURLSessionTask *sessionTask = [_sessionManager POST:URL parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (_isOpenLog) {
MYLog(@"responseObject = %@",responseObject);}
[[self allSessionTask] removeObject:task];
success ? success(responseObject) : nil;
//
responseCache!=nil ? [MLNetworkCache setHttpCache:responseObject URL:URL parameters:parameters] : nil;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (_isOpenLog) {MYLog(@"error = %@",error);}
[[self allSessionTask] removeObject:task];
failure ? failure(error) : nil;
}];
// sessionTask
sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ;
return sessionTask;
}
#pragma mark -
+ (NSURLSessionTask *)uploadFileWithURL:(NSString *)URL
parameters:(id)parameters
name:(NSString *)name
filePath:(NSString *)filePath
progress:(MLHttpProgress)progress
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure {
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
//
// securityPolicy.allowInvalidCertificates = YES;
//
// securityPolicy.validatesDomainName = NO;
// _sessionManager.securityPolicy = securityPolicy;
NSURLSessionTask *sessionTask = [_sessionManager POST:URL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
NSError *error = nil;
[formData appendPartWithFileURL:[NSURL URLWithString:filePath] name:name error:&error];
(failure && error) ? failure(error) : nil;
} progress:^(NSProgress * _Nonnull uploadProgress) {
//
dispatch_sync(dispatch_get_main_queue(), ^{
progress ? progress(uploadProgress) : nil;
});
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (_isOpenLog) {MYLog(@"responseObject = %@",responseObject);}
[[self allSessionTask] removeObject:task];
success ? success(responseObject) : nil;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (_isOpenLog) {MYLog(@"error = %@",error);}
[[self allSessionTask] removeObject:task];
failure ? failure(error) : nil;
}];
// sessionTask
sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ;
return sessionTask;
}
#pragma mark - GIF
+ (NSURLSessionTask *)uploadGIFWithURL:(NSString *)URL
parameters:(id)parameters
name:(NSString *)name
gifData:(NSData *)gifData
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure {
NSURLSessionTask *sessionTask = [_sessionManager POST:URL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
// , fileNamesnil使
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *imageFileName = NSStringFormat(@"%@.gif", str);
[formData appendPartWithFileData:gifData
name:name
fileName:imageFileName
mimeType:@"gif"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (_isOpenLog) {MYLog(@"responseObject = %@",responseObject);}
[[self allSessionTask] removeObject:task];
success ? success(responseObject) : nil;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (_isOpenLog) {MYLog(@"error = %@",error);}
[[self allSessionTask] removeObject:task];
failure ? failure(error) : nil;
}];
// sessionTask
sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ;
return sessionTask;
}
#pragma mark -
+ (NSURLSessionTask *)uploadImagesWithURL:(NSString *)URL
parameters:(id)parameters
name:(NSString *)name
images:(NSArray<UIImage *> *)images
fileNames:(NSArray<NSString *> *)fileNames
imageScale:(CGFloat)imageScale
imageType:(NSString *)imageType
progress:(MLHttpProgress)progress
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure {
//
NSString *timestamp = [BJEncryptionTool getNowTimeTimestamp];
NSString *app_sign = [BJEncryptionTool getSignWith:timestamp];
[_sessionManager.requestSerializer setValue:C_string(timestamp) forHTTPHeaderField:@"timestamp"];
[_sessionManager.requestSerializer setValue:C_string(app_sign) forHTTPHeaderField:@"app-sign"];
NSURLSessionTask *sessionTask = [_sessionManager POST:URL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
for (NSUInteger i = 0; i < images.count; i++) {
//
NSData *imageData = UIImageJPEGRepresentation(images[i], imageScale ?: 1.f);
// , fileNamesnil使
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *imageFileName = NSStringFormat(@"%@%ld.%@",str,i,imageType?:@"jpg");
[formData appendPartWithFileData:imageData
name:name
fileName:fileNames ? NSStringFormat(@"%@.%@",fileNames[i],imageType?:@"jpg") : imageFileName
mimeType:NSStringFormat(@"image/%@",imageType ?: @"jpg")];
}
} progress:^(NSProgress * _Nonnull uploadProgress) {
//
dispatch_sync(dispatch_get_main_queue(), ^{
progress ? progress(uploadProgress) : nil;
});
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (_isOpenLog) {MYLog(@"responseObject = %@",responseObject);}
[[self allSessionTask] removeObject:task];
success ? success(responseObject) : nil;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (_isOpenLog) {MYLog(@"error = %@",error);}
[[self allSessionTask] removeObject:task];
failure ? failure(error) : nil;
}];
// sessionTask
sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ;
return sessionTask;
}
#pragma mark -
+ (NSURLSessionTask *)uploadImagesWithURL:(NSString *)URL
parameters:(id)parameters
name:(NSString *)name
images:(NSArray<UIImage *> *)images
fileNames:(NSArray<NSString *> *)fileNames
imageScale:(CGFloat)imageScale
imageType:(NSString *)imageType
audio:(NSString *)audiofilePath
progress:(MLHttpProgress)progress
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure {
NSURLSessionTask *sessionTask = [_sessionManager POST:URL parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
if (images.count > 0){
for (NSUInteger i = 0; i < images.count; i++) {
//
NSData *imageData = UIImageJPEGRepresentation(images[i], imageScale ?: 1.f);
// , fileNamesnil使
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *imageFileName = NSStringFormat(@"%@%ld.%@",str,i,imageType?:@"jpg");
[formData appendPartWithFileData:imageData
name:NSStringFormat(@"img%ld",i + 1)
fileName:fileNames ? NSStringFormat(@"%@.%@",fileNames[i],imageType?:@"jpg") : imageFileName
mimeType:NSStringFormat(@"image/%@",imageType ?: @"jpg")];
}
}
} progress:^(NSProgress * _Nonnull uploadProgress) {
//
dispatch_sync(dispatch_get_main_queue(), ^{
progress ? progress(uploadProgress) : nil;
});
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (_isOpenLog) {MYLog(@"responseObject = %@",responseObject);}
[[self allSessionTask] removeObject:task];
success ? success(responseObject) : nil;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (_isOpenLog) {MYLog(@"error = %@",error);}
[[self allSessionTask] removeObject:task];
failure ? failure(error) : nil;
}];
// sessionTask
sessionTask ? [[self allSessionTask] addObject:sessionTask] : nil ;
return sessionTask;
}
#pragma mark -
+ (NSURLSessionTask *)downloadWithURL:(NSString *)URL
fileDir:(NSString *)fileDir
progress:(MLHttpProgress)progress
success:(void(^)(NSString *))success
failure:(MLHttpRequestFailed)failure {
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URL]];
__block NSURLSessionDownloadTask *downloadTask = [_sessionManager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
//
dispatch_sync(dispatch_get_main_queue(), ^{
progress ? progress(downloadProgress) : nil;
});
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
//
NSString *downloadDir = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:fileDir ? fileDir : @"Download"];
//
NSFileManager *fileManager = [NSFileManager defaultManager];
//Download
[fileManager createDirectoryAtPath:downloadDir withIntermediateDirectories:YES attributes:nil error:nil];
//
NSString *filePath = [downloadDir stringByAppendingPathComponent:response.suggestedFilename];
//URL
return [NSURL fileURLWithPath:filePath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
[[self allSessionTask] removeObject:downloadTask];
if(failure && error) {failure(error) ; return ;};
success ? success(filePath.absoluteString /** NSURL->NSString*/) : nil;
}];
//
[downloadTask resume];
// sessionTask
downloadTask ? [[self allSessionTask] addObject:downloadTask] : nil ;
return downloadTask;
}
/**
task
*/
+ (NSMutableArray *)allSessionTask {
if (!_allSessionTask) {
_allSessionTask = [[NSMutableArray alloc] init];
}
return _allSessionTask;
}
#pragma mark - AFHTTPSessionManager
/**
*/
+ (void)load {
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
/**
* HTTPAFHTTPSessionManager
* :http://www.jianshu.com/p/5969bbb4af9f
*/
+ (void)initialize {
_sessionManager = [AFHTTPSessionManager manager];
_sessionManager.requestSerializer.timeoutInterval = 30.f;
// _sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
// _sessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
// _sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
_sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/plain", @"text/javascript", @"text/xml", @"image/*", nil];
//
// [AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
}
#pragma mark - AFHTTPSessionManager
+ (void)setAFHTTPSessionManagerProperty:(void (^)(AFHTTPSessionManager *))sessionManager {
sessionManager ? sessionManager(_sessionManager) : nil;
}
+ (void)setRequestSerializer:(MLRequestSerializer)requestSerializer {
_sessionManager.requestSerializer = requestSerializer==MLRequestSerializerHTTP ? [AFHTTPRequestSerializer serializer] : [AFJSONRequestSerializer serializer];
}
+ (void)setResponseSerializer:(MLResponseSerializer)responseSerializer {
_sessionManager.responseSerializer = responseSerializer==MLResponseSerializerHTTP ? [AFHTTPResponseSerializer serializer] : [AFJSONResponseSerializer serializer];
}
+ (void)setRequestTimeoutInterval:(NSTimeInterval)time {
_sessionManager.requestSerializer.timeoutInterval = time;
}
+ (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field {
[_sessionManager.requestSerializer setValue:value forHTTPHeaderField:field];
}
+ (void)openNetworkActivityIndicator:(BOOL)open {
// [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:open];
}
+ (void)setSecurityPolicyWithCerPath:(NSString *)cerPath validatesDomainName:(BOOL)validatesDomainName {
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
// 使
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// ()YES
securityPolicy.allowInvalidCertificates = YES;
// YES;
securityPolicy.validatesDomainName = validatesDomainName;
securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil];
[_sessionManager setSecurityPolicy:securityPolicy];
}
@end
#pragma mark - NSDictionary,NSArray
/*
************************************************************************************
*NSDictionaryNSArray, json
************************************************************************************
*/
#ifdef DEBUG
@implementation NSArray (ML)
- (NSString *)descriptionWithLocale:(id)locale {
NSMutableString *strM = [NSMutableString stringWithString:@"(\n"];
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[strM appendFormat:@"\t%@,\n", obj];
}];
[strM appendString:@")"];
return strM;
}
@end
@implementation NSDictionary (ML)
- (NSString *)descriptionWithLocale:(id)locale {
NSMutableString *strM = [NSMutableString stringWithString:@"{\n"];
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[strM appendFormat:@"\t%@ = %@;\n", key, obj];
}];
[strM appendString:@"}\n"];
return strM;
}
@end
#endif