Files
2022-03-21 11:16:38 +08:00

287 lines
10 KiB
Objective-C

//
// XSHttpTool.m
//
// Created by xiaos on 14/11/10.
// Copyright © 2015年 com.xsdota. All rights reserved.
//
#import "XSHttpTool.h"
//#import "MBProgressHUD+Extend.h"
@implementation XSHttpTool
#pragma mark - GET
+ (void)GET:(NSString *)requestKey
param:(NSDictionary *)param
success:(successBlock)success
failure:(failureBlock)failure {
[self checkReachability];
NSString *URLStr = [self getURLStrByRequsetKey:requestKey];
[[XSHttpTool sharedManager] GET:URLStr parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",operation.response.URL);
success(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
}
+ (void)GETCache:(NSString *)requestKey
param:(NSDictionary *)param
success:(successBlock)success
failure:(failureBlock)failure {
[self checkReachability];
NSString *URLStr = [self getURLStrByRequsetKey:requestKey];
AFHTTPRequestOperationManager *mgr = [XSHttpTool sharedManager];
mgr.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataElseLoad;
[mgr GET:URLStr parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",operation.response.URL);
success(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
}
#pragma mark - POST
+ (void)POST:(NSString *)requestKey
param:(NSDictionary *)param
success:(successBlock)success
failure:(failureBlock)failure
{
[self checkReachability];
NSString *URLStr = [self getURLStrByRequsetKey:requestKey];
[[XSHttpTool sharedManager] POST:URLStr
parameters:param
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",operation.response.URL);
success(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
}
+ (void)UpLoadData:(NSData *)data
to:(NSString *)requestKey
withParamName:(NSString *)paramName
fileName:(NSString *)fileName
mimeType:(NSString *)type
param:(NSDictionary *)param
success:(successBlock)success
failure:(failureBlock)failure
uploadProgress:(progressBlock)uploadProgress {
[self checkReachability];
NSString *URLStr = [self getURLStrByRequsetKey:requestKey];
AFHTTPRequestOperation *operation =
[[XSHttpTool sharedManager]
POST:URLStr
parameters:param
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:data name:paramName fileName:fileName mimeType:type];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
success(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
CGFloat percent = totalBytesWritten * 1.0 / totalBytesExpectedToWrite;
uploadProgress(percent);
}];
}
+ (void)upLoadImages:(NSArray *)images
to:(NSString *)requestKey
withParamName:(NSString *)paramName
ratio:(float)ratio
param:(NSDictionary *)param
success:(successBlock)success
failure:(failureBlock)failure
uploadProgress:(progressBlock)uploadProgress {
[self checkReachability];
NSString *URLStr = [self getURLStrByRequsetKey:requestKey];
AFHTTPRequestOperation *operation =
[[XSHttpTool sharedManager]
POST:URLStr
parameters:param
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSUInteger i = 0;
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyyMMddHHmm"];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
for (UIImage *image in images) {
NSString *fileName = [NSString stringWithFormat:@"%@_%lu.png",dateString,(unsigned long)i];
NSData *imageData;
if (ratio > 0.0f && ratio < 1.0f) {
imageData = UIImageJPEGRepresentation(image, ratio);
}else{
imageData = UIImageJPEGRepresentation(image, 1.0f);
}
[formData appendPartWithFileData:imageData name:paramName fileName:fileName mimeType:@"image/jpg/png/jpeg"];
}
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
success(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
CGFloat percent = totalBytesWritten * 1.0 / totalBytesExpectedToWrite;
uploadProgress(percent);
}];
}
#pragma mark - 设置单例 超时请求响应解析
+ (AFHTTPRequestOperationManager *)sharedManager {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setTimeoutInterval:TIMEOUT];
// manager.
//header 设置
// [manager.requestSerializer setValue:K_PASS_IP forHTTPHeaderField:@"Host"];
// [manager.requestSerializer setValue:@"max-age=0" forHTTPHeaderField:@"Cache-Control"];
// [manager.requestSerializer setValue:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" forHTTPHeaderField:@"Accept"];
// [manager.requestSerializer setValue:@"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3" forHTTPHeaderField:@"Accept-Language"];
// [manager.requestSerializer setValue:@"gzip, deflate" forHTTPHeaderField:@"Accept-Encoding"];
// [manager.requestSerializer setValue:@"keep-alive" forHTTPHeaderField:@"Connection"];
// [manager.requestSerializer setValue:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0" forHTTPHeaderField:@"User-Agent"];
manager.requestSerializer.cachePolicy = 0;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"text/html", @"application/json", nil];
return manager;
}
#pragma mark - 检测网络连接状态
+ (void)checkReachability
{
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
// 连接状态回调处理
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"Unkonw Collection");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"网络未连接");
// [MBProgressHUD showError:@"网络未连接"];
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"WWAN Collection");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WiFi Collection");
break;
}
}];
}
#pragma mark - 拼接出完整的URL
+ (NSString *)getURLStrByRequsetKey:(NSString *)requestKey
{
/** 可以传入完整URL地址 会自动覆盖主API */
if ([requestKey hasPrefix:@"http://"] || [requestKey hasPrefix:@"https://"]) {
return [requestKey stringByRemovingPercentEncoding];
}
NSString *URLStr = [[HOST_ADDRESS stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%@",EXTRA_STR,requestKey]] stringByRemovingPercentEncoding];
return URLStr;
}
#pragma mark - 自定义cache管理
+ (NSString *)cachesDirectory {
NSString * cachesDirectory = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
return cachesDirectory;
}
+ (NSString *)cachePathWithIdentifier:(NSString *)cacheIdentifier {
NSString * cachePath = [self cachesDirectory];
cachePath = [cachePath stringByAppendingPathComponent:cacheIdentifier];
BOOL isDirectory = NO;
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDirectory];
if (fileExists == NO || isDirectory) {
BOOL createFileSuccess = [[NSFileManager defaultManager] createFileAtPath:cachePath contents:nil attributes:nil];
if (createFileSuccess == NO) {
NSLog(@"创建缓存文件失败"); //
return nil;
}
else {
NSLog(@"创建缓存文件成功"); //
}
}
else {
NSLog(@"缓存文件之前已存在"); //
}
return cachePath;
}
+ (BOOL)saveCache:(NSDictionary *)cache
withIdentifier:(NSString *)cacheIdentifier {
NSCAssert([cache isKindOfClass:[NSDictionary class]], @"缓存对象不是字典类型");
NSString * cachePath = [self cachePathWithIdentifier:cacheIdentifier];
BOOL saveSuccess = [cache writeToFile:cachePath atomically:YES];
if (saveSuccess) {
NSLog(@"储存缓存记录成功");
return saveSuccess;
}
else {
NSLog(@"储存缓存记录失败");
return saveSuccess;
}
}
+ (NSDictionary *)cacheWithIdentifier:(NSString *)cacheIdentifier {
NSString * cachePath = [XSHttpTool cachePathWithIdentifier:cacheIdentifier];
NSDictionary * cache = [NSDictionary dictionaryWithContentsOfFile:cachePath];
if (cache) {
NSLog(@"并不存在缓存");
}
NSError * error = nil;
NSDictionary * cacheFileAttributes = [[NSFileManager defaultManager]attributesOfItemAtPath:cachePath error:&error];
if (error) {
NSLog(@"缓存已过期");
}
else if ([[NSDate date]timeIntervalSince1970] - [cacheFileAttributes.fileModificationDate timeIntervalSince1970] > JSON_CACHE_DURATION) {
NSLog(@"缓存已过期");
BOOL removeCacheSuccess = [[NSFileManager defaultManager] removeItemAtPath:cachePath error:&error];
if (removeCacheSuccess) {
NSLog(@"移除已过期的缓存成功");
}
else {
NSLog(@"移除已过期的缓存失败");
}
return nil;
}
else {
}
return cache;
}
@end