需要设置代理
//这个方法如果是http的请求并不会被调用,只有是https的请求才会调用
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler {
// 1.判断接收服务器挑战的方法是否是信任证书,判断是否是服务器信任
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
// 2.如果你信任证书,就从受保护空间里面拿出证书,回调给服务器,告诉服务,我信任你,你给我发送数据吧.
NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
// 3.把证书回调出去
completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
}
}
AFNetworking发送HTTPS请求
- (void)loadData {
// 创建网络请求mansger
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 使AFN支持HTTPS请求
manager.securityPolicy.allowInvalidCertificates = YES;
// 域名验证
manager.securityPolicy.validatesDomainName = NO;
// 修改AFN默认支持接收的文本类型
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html" ,nil];
// 修改AFN默认处理数据的方式 : 设置成只返回原始的二进制数据,程序猿自己反序列化
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 网络请求地址
NSString *URLStr = @"https://mail.itcast.cn";
[manager GET:URLStr parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// NSLog(@"%@ %@",[responseObject class],responseObject);
// 反序列化
NSString *html = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"%@",html);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"出错 %@",error);
}];
}