FDNetwork.m 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. //
  2. // FDNetwork.m
  3. // AFNetworking
  4. //
  5. // Created by fandongtongxue on 2020/2/27.
  6. //
  7. #import "FDNetwork.h"
  8. #import <AFNetworking/AFNetworking.h>
  9. #import "FDNetworkResponseModel.h"
  10. #import <MJExtension/MJExtension.h>
  11. @implementation FDNetwork
  12. + (FDNetwork *)shareInstance{
  13. static FDNetwork *shareInstance = nil;
  14. static dispatch_once_t predicate;
  15. dispatch_once(&predicate, ^{
  16. shareInstance = [[self alloc] init];
  17. });
  18. shareInstance.requestContentType = RequestContentTypeJSON;
  19. shareInstance.timeoutInterval = 30;
  20. [shareInstance setUpCookies];
  21. return shareInstance;
  22. }
  23. - (void)GET:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(id _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
  24. //创建网络请求管理对象
  25. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  26. //申明请求的数据是json类型
  27. manager.requestSerializer = [self requestSerializerWithType:[FDNetwork shareInstance].requestContentType];
  28. //申明返回的结果是json类型
  29. manager.responseSerializer = [self responseSerializerWithType:[FDNetwork shareInstance].responseContentType];
  30. //如果报接受类型不一致请替换一致text/html或别的
  31. manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
  32. //超时时间
  33. manager.requestSerializer.timeoutInterval = [FDNetwork shareInstance].timeoutInterval;
  34. //证书
  35. // manager.securityPolicy = [self customSecurityPolicy];
  36. //发送网络请求(请求方式为GET)
  37. dispatch_async(dispatch_get_main_queue(), ^{
  38. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  39. });
  40. [manager GET:URLString parameters:param headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  41. FDNetworkResponseModel *model = [FDNetworkResponseModel mj_objectWithKeyValues:responseObject];
  42. if (model.code.intValue == 1) {
  43. success(model);
  44. }else{
  45. failure(model.msg);
  46. }
  47. dispatch_async(dispatch_get_main_queue(), ^{
  48. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  49. });
  50. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  51. failure(error.localizedDescription);
  52. dispatch_async(dispatch_get_main_queue(), ^{
  53. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  54. });
  55. }];
  56. }
  57. - (void)POST:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(id _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
  58. //创建网络请求管理对象
  59. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  60. //申明返回的结果是json类型
  61. manager.responseSerializer = [self responseSerializerWithType:[FDNetwork shareInstance].responseContentType];
  62. //申明请求的数据是json类型
  63. manager.requestSerializer = [self requestSerializerWithType:[FDNetwork shareInstance].requestContentType];
  64. //如果报接受类型不一致请替换一致text/html或别的
  65. manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
  66. //超时时间
  67. manager.requestSerializer.timeoutInterval = [FDNetwork shareInstance].timeoutInterval;
  68. [self setUpCookies];
  69. //证书
  70. // manager.securityPolicy = [self customSecurityPolicy];
  71. //发送网络请求(请求方式为POST)
  72. dispatch_async(dispatch_get_main_queue(), ^{
  73. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  74. });
  75. [manager POST:URLString parameters:param headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  76. FDNetworkResponseModel *model = [FDNetworkResponseModel mj_objectWithKeyValues:responseObject];
  77. if (model.code.intValue == 1) {
  78. success(model);
  79. }else{
  80. failure(model.msg);
  81. }
  82. dispatch_async(dispatch_get_main_queue(), ^{
  83. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  84. });
  85. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  86. failure(error.localizedDescription);
  87. dispatch_async(dispatch_get_main_queue(), ^{
  88. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  89. });
  90. }];
  91. }
  92. - (AFHTTPRequestSerializer *)requestSerializerWithType:(RequestContentType)type{
  93. switch (type) {
  94. case RequestContentTypeJSON:
  95. return [AFJSONRequestSerializer serializer];
  96. break;
  97. default:
  98. break;
  99. }
  100. }
  101. - (AFHTTPResponseSerializer *)responseSerializerWithType:(ResponseContentType)type{
  102. switch (type) {
  103. case ResponseContentTypeJSON:
  104. return [AFJSONResponseSerializer serializer];
  105. break;
  106. default:
  107. return [AFHTTPResponseSerializer serializer];
  108. break;
  109. }
  110. }
  111. - (NSSet *)acceptableContentTypes{
  112. return [NSSet setWithObjects:@"application/json", @"text/html", @"text/json",@"image/jpeg",@"audio/mp3",nil];
  113. }
  114. - (void)setUpCookies{
  115. // AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  116. // [manager.requestSerializer setHTTPShouldHandleCookies:YES];
  117. // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"PHPSESSID", @"3mhscdjmhmegpiio0ugha0hgt4"] forHTTPHeaderField:@"Cookie"];
  118. // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"PHPSESSID2", @"r5tv7t820ets6sddouqlb4nln0"] forHTTPHeaderField:@"Cookie"];
  119. // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"client_ip", @"222.132.157.159"] forHTTPHeaderField:@"Cookie"];
  120. // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"user_id", @"100513"] forHTTPHeaderField:@"Cookie"];
  121. // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"nick_name", @"100513"] forHTTPHeaderField:@"Cookie"];
  122. // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"user_pwd", @"6d5f0276bf24654556932cab6b697923"] forHTTPHeaderField:@"Cookie"];
  123. NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
  124. [cookieProperties setObject:@"3mhscdjmhmegpiio0ugha0hgt4"forKey:@"PHPSESSID"];
  125. [cookieProperties setObject:@"r5tv7t820ets6sddouqlb4nln0"forKey:@"PHPSESSID2"];
  126. [cookieProperties setObject:@"222.132.157.159"forKey:@"client_ip"];
  127. [cookieProperties setObject:@"100513"forKey:@"user_id"];
  128. [cookieProperties setObject:@"100513"forKey:@"nick_name"];
  129. [cookieProperties setObject:@"6d5f0276bf24654556932cab6b697923"forKey:@"user_pwd"];
  130. NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
  131. [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
  132. }
  133. - (AFSecurityPolicy *)customSecurityPolicy{
  134. // /先导入证书
  135. NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"证书" ofType:@"cer"];//证书的路径
  136. NSData *certData = [NSData dataWithContentsOfFile:cerPath];
  137. // AFSSLPinningModeCertificate 使用证书验证模式
  138. AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
  139. // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
  140. // 如果是需要验证自建证书,需要设置为YES
  141. securityPolicy.allowInvalidCertificates = YES;
  142. //validatesDomainName 是否需要验证域名,默认为YES;
  143. //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
  144. //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
  145. //如置为NO,建议自己添加对应域名的校验逻辑。
  146. securityPolicy.validatesDomainName = NO;
  147. securityPolicy.pinnedCertificates = [NSSet setWithArray:@[certData]];
  148. return securityPolicy;
  149. }
  150. @end