HWAFHttpTool.m 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. //
  2. // HttpTool.m
  3. // SC_ComponentGallery
  4. //
  5. // Created by apple on 2016/11/3.
  6. // Copyright © 2016年 com.shichuang. All rights reserved.
  7. //
  8. #import "HWAFHttpTool.h"
  9. static NSInteger const timeoutInterval = 20;
  10. static AFHTTPSessionManager *Photomanager;
  11. @implementation HWAFHttpTool
  12. /**字典转成Json字符串*/
  13. + (NSString*)dictionaryToJson:(NSDictionary *)dic
  14. {
  15. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
  16. return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  17. }
  18. + (NSDictionary *)JSONStringToNSString:(NSString *)str
  19. {
  20. NSString *infoStr = str ;
  21. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:[infoStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  22. return dic;
  23. }
  24. + (NSMutableArray *)JSONStringToNSMutableArray:(NSString *)str
  25. {
  26. NSString *infoStr = str ;
  27. NSMutableArray *arr = [NSJSONSerialization JSONObjectWithData:[infoStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  28. return arr;
  29. }
  30. + (NSArray *)JSONStringToNSArrray:(NSString *)str
  31. {
  32. NSString *infoStr = str ;
  33. NSArray *arr = [NSJSONSerialization JSONObjectWithData:[infoStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  34. return arr;
  35. }
  36. /*
  37. * get请求
  38. */
  39. + (void)getRequestWithURLStr:(NSString *)urlStr params:(NSDictionary *)params success:(void (^)(NSDictionary * responseDic))success failure:(void(^)(NSString* error))failure
  40. {
  41. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  42. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  43. manager.requestSerializer.timeoutInterval = timeoutInterval;
  44. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  45. manager.responseSerializer = [AFHTTPResponseSerializer serializer];
  46. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  47. // manager.responseSerializer = [AFHTTPResponseSerializer serializer];
  48. NSString *newPath = [NSString stringWithFormat:@"%@",urlStr];
  49. [manager GET:newPath parameters:params progress:^(NSProgress * _Nonnull downloadProgress) {
  50. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  51. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  52. NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
  53. if (success)
  54. {
  55. NSLog(@"参数:%@\nURL:%@ ",params,newPath);
  56. NSLog(@"data:%@",jsonDic);
  57. success(jsonDic);
  58. }
  59. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  60. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  61. [self requestFailure:failure error:error];
  62. }];
  63. }
  64. /*
  65. * post请求
  66. *
  67. */
  68. + (void)postRequestWithURLStr:(NSString *)urlStr params:(NSDictionary *)params success:(void (^)(NSDictionary * responseDic))success failure:(void(^)(NSString* error))failure
  69. {
  70. dispatch_async(dispatch_get_main_queue(), ^{
  71. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  72. });
  73. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  74. manager.requestSerializer.timeoutInterval = timeoutInterval;
  75. //调出请求头
  76. // manager.responseSerializer = [AFJSONResponseSerializer serializer];
  77. // [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  78. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
  79. // manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];
  80. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  81. NSString *newPath = [NSString stringWithFormat:@"%@",urlStr];
  82. [manager POST:newPath parameters:params constructingBodyWithBlock:^(id _Nonnull formData) {
  83. } progress:^(NSProgress * _Nonnull uploadProgress) {
  84. // 这里可以获取到目前的数据请求的进度
  85. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  86. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  87. NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
  88. if (success)
  89. {
  90. // NSLog(@"参数:%@\nURL:%@ \ndata:%@",params,newPath,jsonDic);
  91. success(jsonDic);
  92. }
  93. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  94. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  95. [self requestFailure:failure error:error];
  96. }];
  97. }
  98. /*
  99. * postJSON请求
  100. *
  101. */
  102. + (void)postJSONRequestWithURLStr:(NSString *)urlStr params:(NSDictionary *)params success:(void (^)(NSDictionary * responseDic))success failure:(void(^)(NSString* error))failure {
  103. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  104. AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
  105. NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:urlStr parameters:params error:nil];
  106. request.timeoutInterval = timeoutInterval;
  107. [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  108. [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
  109. NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
  110. if (!error)
  111. {
  112. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  113. if ([responseObject isKindOfClass:[NSDictionary class]])
  114. {
  115. NSLog(@"参数:%@\nURL:%@ \ndata:%@",params,urlStr,responseObject);
  116. dispatch_async(dispatch_get_main_queue(), ^{
  117. success(responseObject);
  118. });
  119. }
  120. }
  121. else
  122. {
  123. [self requestFailure:failure error:error];
  124. }
  125. }];
  126. [task resume];
  127. }
  128. /*
  129. * 上传图片
  130. */
  131. + (void)postRequestWithURLStr:(NSString *)urlStr params:(NSDictionary *)params ImageDataArray:(NSMutableArray *)imageArray IsSingleImg:(BOOL)isSingle success:(void (^)(NSDictionary * responseDic))success failure:(void(^)(NSString* error))failure
  132. {
  133. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  134. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  135. manager.responseSerializer = [AFHTTPResponseSerializer serializer];
  136. NSString *newPath = [NSString stringWithFormat:@"%@",urlStr];
  137. [manager POST:newPath parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  138. if (isSingle == YES && imageArray.count > 0)
  139. {
  140. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  141. formatter.dateFormat = @"yyyyMMddHHmmss";
  142. NSString *str = [formatter stringFromDate:[NSDate date]];
  143. NSString *fileName = [NSString stringWithFormat:@"%@.jpg",str];
  144. [formData appendPartWithFileData:imageArray[0] name:@"licenseFront" fileName:fileName mimeType:@"image/jpeg"];
  145. }
  146. else
  147. {
  148. for (int i = 0 ; i < imageArray.count; i ++)
  149. {
  150. NSData * imgData = imageArray [i];
  151. NSString *fileName = [NSString stringWithFormat:@"%d.jpg",i];
  152. [formData appendPartWithFileData:imgData name:@"sd_photolist" fileName:fileName mimeType:@"image/jpeg"];
  153. }
  154. }
  155. } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  156. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  157. NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
  158. if (success)
  159. {
  160. success(jsonDic);
  161. }
  162. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  163. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  164. [self requestFailure:failure error:error];
  165. }];
  166. }
  167. #pragma mark - 上传图片
  168. + (void)uploadImage:(UIImage *)successImage URL:(NSString *)URLString parameters:(id)parameters success:(void (^)(id responseDic))complete
  169. {
  170. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  171. manager.responseSerializer = [AFHTTPResponseSerializer serializer];
  172. [HWProgressHUD fb_showLoading];
  173. CGFloat imgWidth = successImage.size.width;
  174. CGFloat imgHieght = successImage.size.height;
  175. if(successImage.size.width > successImage.size.height) //宽 > 高
  176. {
  177. if(imgWidth > 2000)
  178. {
  179. imgWidth = successImage.size.width/4;
  180. imgHieght = successImage.size.height/4;
  181. }
  182. if(imgWidth >= 1000)
  183. {
  184. imgWidth = successImage.size.width/3;
  185. imgHieght = successImage.size.height/3;
  186. }
  187. }
  188. else //宽 < 高
  189. {
  190. if (imgHieght > 3000)
  191. {
  192. imgWidth = successImage.size.width/5;
  193. imgHieght = successImage.size.height/5;
  194. }
  195. if (imgHieght >= 1500)
  196. {
  197. imgWidth = successImage.size.width/3;
  198. imgHieght = successImage.size.height/3;
  199. }
  200. }
  201. UIImage * compressImg = [self imageWithImageSimple:successImage scaledToSize:CGSizeMake(imgWidth, imgHieght)];
  202. NSLog(@"原本尺寸:(%f,%f) 裁剪尺寸:(%f,%f)",successImage.size.width,successImage.size.height,imgWidth,imgHieght);
  203. NSData *data;
  204. if(UIImagePNGRepresentation(compressImg) == nil)
  205. {
  206. data = UIImageJPEGRepresentation(compressImg, 1.0);
  207. }
  208. else
  209. {
  210. data = UIImagePNGRepresentation(compressImg);
  211. }
  212. [manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  213. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  214. formatter.dateFormat = @"yyyyMMddHHmmss";
  215. NSString *str = [formatter stringFromDate:[NSDate date]];
  216. NSString *fileName = [NSString stringWithFormat:@"%@.jpg",str];
  217. [formData appendPartWithFileData:data name:@"licenseFront" fileName:fileName mimeType:@"image/jpeg"];
  218. } progress:^(NSProgress * _Nonnull uploadProgress) {
  219. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  220. [HWProgressHUD fb_dismiss];
  221. NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
  222. complete(jsonDic);
  223. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  224. [HWProgressHUD fb_dismiss];
  225. NSLog(@"%@",error);
  226. }];
  227. }
  228. //压缩图片
  229. + (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize
  230. {
  231. // Create a graphics image context
  232. UIGraphicsBeginImageContext(newSize);
  233. // Tell the old image to draw in this new context, with the desired
  234. // new size
  235. [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
  236. // Get the new image from the context
  237. UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
  238. // End the context
  239. UIGraphicsEndImageContext();
  240. // Return the new image.
  241. return newImage;
  242. }
  243. /*
  244. 请求失败回调
  245. */
  246. + (void)requestFailure:(void(^)(NSString* error))failure error:(NSError *)error {
  247. NSString *errorMsg = @"";
  248. if (error.code == NSURLErrorTimedOut)
  249. {
  250. errorMsg = @"请求超时";
  251. }
  252. else if (error.code == NSURLErrorNotConnectedToInternet)
  253. {
  254. errorMsg = @"网络异常,请检查网络";
  255. }
  256. else
  257. {
  258. errorMsg = @"系统异常,请稍后再试";
  259. }
  260. failure(errorMsg);
  261. }
  262. @end