123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- //
- // 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
|