热门搜索 :
考研考公
您的当前位置:首页正文

AFNetworking封装https

来源:东饰资讯网

1. 将后台给的.cer证书直接拖进工程, 别忘记勾选taget

2. .h // 导入MBProgress和AFNetworking

////  SKAFNetworking.h//  SoftwarePsychologicalDoctor////  Created by skma on 16/7/5.//  Copyright © 2016年 skma. All rights reserved.//#import#import "AFNetworking.h"

@interface SKAFNetworking : NSObject

+ (void)GETResource:(NSString *)urlString parameters:(id )parameters loadView:(UIView *)loadView loadString:(NSString *)loadString success:(void (^)(NSURLSessionDataTask *_task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure;

+ (void)POSTResource:(NSString *)urlString parameters:(id)parameters loadView:(UIView *)loadView loadString:(NSString *)loadString success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure;

@end

3. .m

//

//  SKAFNetworking.m

//  SoftwarePsychologicalDoctor

//

//  Created by skma on 16/7/5.

//  Copyright © 2016年 skma. All rights reserved.

//

#import "SKAFNetworking.h"

#import "MBProgressHUD.h"

@interface SKAFNetworking ()

@end

@implementation SKAFNetworking

+ (void)GETResource:(NSString *)urlString parameters:(id)parameters loadView:(UIView *)loadView loadString:(NSString *)loadString success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure

{

MBProgressHUD *HUD = [[MBProgressHUD alloc]initWithView:loadView];

HUD.label.text = loadString;

[loadView addSubview:HUD];

[HUD showAnimated:YES];

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

securityPolicy.allowInvalidCertificates = YES;//是否允许使用自签名证书

securityPolicy.validatesDomainName = NO;//是否需要验证域名,默认YES

manager.securityPolicy = securityPolicy;

//  证书

__weak AFHTTPSessionManager *weakManager = manager;

[manager setSessionDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential *__autoreleasing *_credential) {

SecTrustRef serverTrust = [[challenge protectionSpace] serverTrust];

/**

*  导入多张CA证书

*/

NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"polestar_server" ofType:@"cer"];//自签名证书

NSData* caCert = [NSData dataWithContentsOfFile:cerPath];

NSArray *cerArray = @[caCert];

weakManager.securityPolicy.pinnedCertificates = cerArray;

SecCertificateRef caRef = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCert);

NSCAssert(caRef != nil, @"caRef is nil");

NSArray *caArray = @[(__bridge id)(caRef)];

NSCAssert(caArray != nil, @"caArray is nil");

OSStatus status = SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)caArray);

SecTrustSetAnchorCertificatesOnly(serverTrust,NO);

NSCAssert(errSecSuccess == status, @"SecTrustSetAnchorCertificates failed");

NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;

__autoreleasing NSURLCredential *credential = nil;

if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {

if ([weakManager.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) {

credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];

if (credential) {

disposition = NSURLSessionAuthChallengeUseCredential;

} else {

disposition = NSURLSessionAuthChallengePerformDefaultHandling;

}

} else {

disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;

}

} else {

disposition = NSURLSessionAuthChallengePerformDefaultHandling;

}

return disposition;

}];

//    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

//    NSString *path = [NSString stringWithFormat:@"%@/%ld.xxoo", docPath, (unsigned long)[urlString hash]];

//

//    id data = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

//    success(nil,data);

//    [NSKeyedArchiver archiveRootObject:responseObject toFile:path];

//    success(task,responseObject);

//

[manager GET:urlString parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

[HUD hideAnimated:YES];

success(task,responseObject);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

[HUD hideAnimated:YES];

failure(task,error);

}];

}

+ (void)POSTResource:(NSString *)urlString parameters:(id)parameters loadView:(UIView *)loadView loadString:(NSString *)loadString success:(void (^)(NSURLSessionDataTask *, id))success failure:(void (^)(NSURLSessionDataTask *, NSError *))failure

{

MBProgressHUD *HUD = [[MBProgressHUD alloc]initWithView:loadView];

HUD.label.text = loadString;

[loadView addSubview:HUD];

[HUD showAnimated:YES];

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

// 证书

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

securityPolicy.allowInvalidCertificates = YES;//是否允许使用自签名证书

securityPolicy.validatesDomainName = NO;//是否需要验证域名,默认YES

manager.securityPolicy = securityPolicy;

__weak AFHTTPSessionManager *weakManager = manager;

[manager setSessionDidReceiveAuthenticationChallengeBlock:^NSURLSessionAuthChallengeDisposition(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential *__autoreleasing *_credential) {

SecTrustRef serverTrust = [[challenge protectionSpace] serverTrust];

/**

*  导入多张CA证书

*/

NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"polestar_server" ofType:@"cer"];//自签名证书

NSData* caCert = [NSData dataWithContentsOfFile:cerPath];

NSArray *cerArray = @[caCert];

weakManager.securityPolicy.pinnedCertificates = cerArray;

SecCertificateRef caRef = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCert);

NSCAssert(caRef != nil, @"caRef is nil");

NSArray *caArray = @[(__bridge id)(caRef)];

NSCAssert(caArray != nil, @"caArray is nil");

OSStatus status = SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)caArray);

SecTrustSetAnchorCertificatesOnly(serverTrust,NO);

NSCAssert(errSecSuccess == status, @"SecTrustSetAnchorCertificates failed");

NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;

__autoreleasing NSURLCredential *credential = nil;

if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {

if ([weakManager.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) {

credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];

if (credential) {

disposition = NSURLSessionAuthChallengeUseCredential;

} else {

disposition = NSURLSessionAuthChallengePerformDefaultHandling;

}

} else {

disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;

}

} else {

disposition = NSURLSessionAuthChallengePerformDefaultHandling;

}

return disposition;

}];

[manager POST:urlString parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

[HUD hideAnimated:YES];

success(task,responseObject);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

[HUD hideAnimated:YES];

failure(task,error);

}];

}

@end

4 .使用

NSDictionary *par = @{@"Account":@"12345678", @"PWD":@"abcdefg"};

NSLog(@"成功");

} failure:^(NSURLSessionDataTask *task, NSError *error) {

NSLog(@"失败");

}];

5. 直接拿走用

Top