财神随手记账

JZHttp.m 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. //
  2. // JZHttp.m
  3. // JIZHANG
  4. //
  5. // Created by kuxuan on 2017/10/19.
  6. // Copyright © 2017年 kuxuan. All rights reserved.
  7. //
  8. #import "JZHttp.h"
  9. @implementation JZHttp
  10. + (void)post:(NSString *)url params:(id)params success:(void(^)(id json))success failure:(void(^)(NSError *error))failure {
  11. // 1.创建请求管理者
  12. AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
  13. mgr.requestSerializer = [AFHTTPRequestSerializer serializer]; // 解析为data
  14. mgr.responseSerializer=[AFHTTPResponseSerializer serializer];
  15. mgr.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",nil];
  16. // mgr.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",nil];
  17. // [mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
  18. mgr.requestSerializer.timeoutInterval = 15;
  19. NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
  20. NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
  21. [mgr.requestSerializer setValue:app_Version forHTTPHeaderField:@"version"];
  22. [mgr.requestSerializer setValue:JZCHANNEL_ID forHTTPHeaderField:@"cid"];
  23. NSString *token = [[NSUserDefaults standardUserDefaults]objectForKey:JZTOKEN];
  24. if (token.length>0) {
  25. [mgr.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  26. [mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
  27. }
  28. // 2.发送请求
  29. [mgr POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  30. id responseDict =[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
  31. if ([responseDict[@"code"] isEqual:@0]) {
  32. if (!responseDict[@"data"]) {
  33. success(@{});
  34. }else{
  35. success(responseDict[@"data"]);
  36. }
  37. }else{
  38. NSArray *errorArray = responseDict[@"error"];
  39. if (errorArray.count>0) {
  40. NSString *message = errorArray[0];
  41. [MBProgressHUD showTip:message];
  42. return ;
  43. }
  44. // [MBProgressHUD showTip:responseDict[@"error"]];
  45. }
  46. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  47. // NSData * data = error.userInfo[@"com.alamofire.serialization.response.error.data"];
  48. // NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
  49. // NSLog(@"服务器的错误原因:%@",str);
  50. if ([error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey] statusCode] == 401) {
  51. [MBProgressHUD showTip:@"您已在另一款设备登录,请重新登录"];
  52. // 清除用户缓存数据及token
  53. [[JZLoginManager shareInstance] clearInfomation];
  54. }
  55. if (failure) {
  56. failure(error);
  57. }
  58. }];
  59. }
  60. + (void)get:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure {
  61. AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
  62. mgr.requestSerializer.timeoutInterval = 15;
  63. mgr.requestSerializer = [AFHTTPRequestSerializer serializer]; // 解析为data
  64. mgr.responseSerializer=[AFHTTPResponseSerializer serializer];
  65. mgr.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",nil];
  66. NSUserDefaults *userdefault = [NSUserDefaults standardUserDefaults];
  67. NSString *token = [userdefault stringForKey:JZTOKEN];
  68. [mgr.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  69. [mgr.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
  70. NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
  71. NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
  72. [mgr.requestSerializer setValue:app_Version forHTTPHeaderField:@"version"];
  73. [mgr.requestSerializer setValue:JZCHANNEL_ID forHTTPHeaderField:@"cid"];
  74. // 2.发送请求
  75. [mgr GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  76. id responseDict =[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
  77. if ([responseDict[@"code"] isEqual:@0]) {
  78. if (!responseDict[@"data"]) {
  79. success(@{});
  80. }else{
  81. success(responseDict[@"data"]);
  82. }
  83. }else{
  84. NSArray *errorArray = responseDict[@"error"];
  85. NSString *message = errorArray[0];
  86. if (message.length) {
  87. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"温馨提示" message:message preferredStyle:UIAlertControllerStyleAlert];
  88. [alertController addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  89. }]];
  90. [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil];
  91. }
  92. }
  93. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  94. if (failure) {
  95. // NSData * data = error.userInfo[@"com.alamofire.serialization.response.error.data"];
  96. // NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
  97. // NSLog(@"服务器的错误原因:%@",str);
  98. failure(error);
  99. }
  100. }];
  101. }
  102. + (void)uploadImageWithUrl:(NSString *)url para:(NSDictionary *)para name:(NSString *)name imageData:(NSData *)data imageName:(NSString *)imageName success:(void(^)(id json))success failure:(void(^)(NSError *error))failure{
  103. //2. 利用时间戳当做图片名字
  104. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  105. formatter.dateFormat = @"yyyyMMddHHmmss";
  106. NSString *dateString = [formatter stringFromDate:[NSDate date]];
  107. NSString *fileName = [NSString stringWithFormat:@"%@%@.jpg",dateString,imageName];
  108. //3. 图片二进制文件
  109. NSLog(@"upload image size: %ld k", (long)(data.length / 1024));
  110. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  111. manager.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"application/json",@"text/html",@"image/jpeg",@"image/png",@"application/octet-stream",@"text/javascript",@"text/json",nil];
  112. manager.requestSerializer= [AFHTTPRequestSerializer serializer];
  113. manager.responseSerializer= [AFHTTPResponseSerializer serializer];
  114. NSUserDefaults *userdefault = [NSUserDefaults standardUserDefaults];
  115. NSString *token = [userdefault stringForKey:JZTOKEN];
  116. [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@",token] forHTTPHeaderField:@"Authorization"];
  117. NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
  118. NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
  119. [manager.requestSerializer setValue:app_Version forHTTPHeaderField:@"version"];
  120. [manager.requestSerializer setValue:JZCHANNEL_ID forHTTPHeaderField:@"cid"];
  121. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
  122. [manager POST:url parameters:para constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  123. //上传的参数(上传图片,以文件流的格式)
  124. if (data.length != 0) {
  125. [formData appendPartWithFileData:data name:name fileName:fileName mimeType:@"image/png"];
  126. }
  127. } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  128. id responseDict =[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
  129. success(responseDict);
  130. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  131. // NSData * data = error.userInfo[@"com.alamofire.serialization.response.error.data"];
  132. // NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
  133. // NSLog(@"服务器的错误原因:%@",str);
  134. if (failure) {
  135. failure(error);
  136. }
  137. }];
  138. }
  139. @end