| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- //
- // FDNetwork.m
- // AFNetworking
- //
- // Created by fandongtongxue on 2020/2/27.
- //
- #import "FDNetwork.h"
- #import <AFNetworking/AFNetworking.h>
- #import "FDNetworkResponseModel.h"
- #import <MJExtension/MJExtension.h>
- @implementation FDNetwork
- + (FDNetwork *)shareInstance{
- static FDNetwork *shareInstance = nil;
- static dispatch_once_t predicate;
- dispatch_once(&predicate, ^{
- shareInstance = [[self alloc] init];
- });
- shareInstance.requestContentType = RequestContentTypeJSON;
- shareInstance.timeoutInterval = 30;
- [shareInstance setUpCookies];
- return shareInstance;
- }
- - (void)GET:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(id _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
- //创建网络请求管理对象
- AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
- //申明请求的数据是json类型
- manager.requestSerializer = [self requestSerializerWithType:[FDNetwork shareInstance].requestContentType];
- //申明返回的结果是json类型
- manager.responseSerializer = [self responseSerializerWithType:[FDNetwork shareInstance].responseContentType];
- //如果报接受类型不一致请替换一致text/html或别的
- manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
- //超时时间
- manager.requestSerializer.timeoutInterval = [FDNetwork shareInstance].timeoutInterval;
- //证书
- // manager.securityPolicy = [self customSecurityPolicy];
- //发送网络请求(请求方式为GET)
- dispatch_async(dispatch_get_main_queue(), ^{
- [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
- });
- [manager GET:URLString parameters:param headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
- FDNetworkResponseModel *model = [FDNetworkResponseModel mj_objectWithKeyValues:responseObject];
- if (model.code.intValue == 1) {
- success(model);
- }else{
- failure(model.msg);
- }
- dispatch_async(dispatch_get_main_queue(), ^{
- [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
- });
- } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- failure(error.localizedDescription);
- dispatch_async(dispatch_get_main_queue(), ^{
- [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
- });
- }];
- }
- - (void)POST:(NSString *)URLString param:(NSDictionary *)param success:(void (^)(id _Nonnull))success failure:(void (^)(NSString * _Nonnull))failure{
- //创建网络请求管理对象
- AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
- //申明返回的结果是json类型
- manager.responseSerializer = [self responseSerializerWithType:[FDNetwork shareInstance].responseContentType];
- //申明请求的数据是json类型
- manager.requestSerializer = [self requestSerializerWithType:[FDNetwork shareInstance].requestContentType];
- //如果报接受类型不一致请替换一致text/html或别的
- manager.responseSerializer.acceptableContentTypes = [self acceptableContentTypes];
- //超时时间
- manager.requestSerializer.timeoutInterval = [FDNetwork shareInstance].timeoutInterval;
- [self setUpCookies];
- //证书
- // manager.securityPolicy = [self customSecurityPolicy];
- //发送网络请求(请求方式为POST)
- dispatch_async(dispatch_get_main_queue(), ^{
- [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
- });
- [manager POST:URLString parameters:param headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
- FDNetworkResponseModel *model = [FDNetworkResponseModel mj_objectWithKeyValues:responseObject];
- if (model.code.intValue == 1) {
- success(model);
- }else{
- failure(model.msg);
- }
- dispatch_async(dispatch_get_main_queue(), ^{
- [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
- });
- } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- failure(error.localizedDescription);
- dispatch_async(dispatch_get_main_queue(), ^{
- [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
- });
- }];
- }
- - (AFHTTPRequestSerializer *)requestSerializerWithType:(RequestContentType)type{
- switch (type) {
- case RequestContentTypeJSON:
- return [AFJSONRequestSerializer serializer];
- break;
-
- default:
- break;
- }
- }
- - (AFHTTPResponseSerializer *)responseSerializerWithType:(ResponseContentType)type{
- switch (type) {
- case ResponseContentTypeJSON:
- return [AFJSONResponseSerializer serializer];
- break;
-
- default:
- return [AFHTTPResponseSerializer serializer];
- break;
- }
- }
- - (NSSet *)acceptableContentTypes{
- return [NSSet setWithObjects:@"application/json", @"text/html", @"text/json",@"image/jpeg",@"audio/mp3",nil];
- }
- - (void)setUpCookies{
- // AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
- // [manager.requestSerializer setHTTPShouldHandleCookies:YES];
- // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"PHPSESSID", @"3mhscdjmhmegpiio0ugha0hgt4"] forHTTPHeaderField:@"Cookie"];
- // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"PHPSESSID2", @"r5tv7t820ets6sddouqlb4nln0"] forHTTPHeaderField:@"Cookie"];
- // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"client_ip", @"222.132.157.159"] forHTTPHeaderField:@"Cookie"];
- // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"user_id", @"100513"] forHTTPHeaderField:@"Cookie"];
- // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"nick_name", @"100513"] forHTTPHeaderField:@"Cookie"];
- // [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", @"user_pwd", @"6d5f0276bf24654556932cab6b697923"] forHTTPHeaderField:@"Cookie"];
- NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
- [cookieProperties setObject:@"3mhscdjmhmegpiio0ugha0hgt4"forKey:@"PHPSESSID"];
- [cookieProperties setObject:@"r5tv7t820ets6sddouqlb4nln0"forKey:@"PHPSESSID2"];
- [cookieProperties setObject:@"222.132.157.159"forKey:@"client_ip"];
- [cookieProperties setObject:@"100513"forKey:@"user_id"];
- [cookieProperties setObject:@"100513"forKey:@"nick_name"];
- [cookieProperties setObject:@"6d5f0276bf24654556932cab6b697923"forKey:@"user_pwd"];
- NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
- }
- - (AFSecurityPolicy *)customSecurityPolicy{
- // /先导入证书
- NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"证书" ofType:@"cer"];//证书的路径
- NSData *certData = [NSData dataWithContentsOfFile:cerPath];
-
- // AFSSLPinningModeCertificate 使用证书验证模式
- AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
-
- // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
- // 如果是需要验证自建证书,需要设置为YES
- securityPolicy.allowInvalidCertificates = YES;
-
- //validatesDomainName 是否需要验证域名,默认为YES;
- //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
- //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
- //如置为NO,建议自己添加对应域名的校验逻辑。
- securityPolicy.validatesDomainName = NO;
-
- securityPolicy.pinnedCertificates = [NSSet setWithArray:@[certData]];
-
- return securityPolicy;
- }
- @end
|