iOS 9 AFNetworking3.x 使用整理 (https)
简述
AFNetworking 是轻量级的网络库,使用它 非常方便。以前使用AFNetworking 1.x 访问 https 只是 配置一个宏,但最近升级AFNetworking 3.x 访问 https接口 时出现了各种问题 如code =9813 的这种错误 ,解决过程也是在网上查的结果,各种的试还是不成功。主要是 忽略了证书的导入,和 AFNetworking 的AFSecurityPolicy配置不正确。所以你 一定要记得去向 服务器开发人员和部署人员 要证书,要不肯定不行。。。
导入 AFNetworking
方式 1:
下载AFNetworking, 解压后把里面的 AFNetworking 文件夹拖入你的项目
方式 2:
当然你也可以使用cocopod 将AFNetworking 加载到你的项目。在命令行 cd 到你工程的主目录下输入命令 vi Podfile ,即创建 Podfile 文件,并写入 以下:
platform :ios, '7.0'
pod "AFNetworking"
记得关闭xcode,然后再输入命令* pod install *即可将AFNetworking 导入到你的工程
导入 cer 证书
向服务器要配置服务器时 生成的.crt 文件 然后在命令行输入命令 : openssl x509 -in server.crt -out client.cer -outform der 将生成 的.cer 文件导入你的工程(直接拖入即可)
使用
封装
最好对 AFNetworking 进行简单的封装 ,这样可以对网络请求相关的统一管理。如:
//
// ZXJAppHTTPClient.h
// AFNetworkingDemo
//
// Created by zhangxiaojing on 16/1/13.
// Copyright © 2016年 XXX. All rights reserved.
//
#import <AFNetworking/AFNetworking.h>
@interface ZXJAppHTTPClient : AFHTTPSessionManager
+ (instancetype)sharedUserSVRClient;
+ (instancetype)sharedHtmlSVRClient;
@end
注意
设置AFSecurityPolicy 的模式一定得是AFSSLPinningModePublicKey,这样才会允许无效的非官方的内置证书请求通过。如:
+ (instancetype)sharedUserSVRClient {
static ZXJAppHTTPClient *sharedUserSVRClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedUserSVRClient = [[ZXJAppHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:kParAPIBaseUserServiceURLString]];
sharedUserSVRClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; sharedUserSVRClient.securityPolicy.allowInvalidCertificates = YES;
});
return sharedUserSVRClient;
}
使用实例 1 -json
[[ZXJAppHTTPClient sharedUserSVRClient] POST:loginApiPort parameters:dictParLogin progress:nil success:^(NSURLSessionDataTask * __unused task, id JSON)
{
NSLog(@"成功 返回:\n%@\n",(NSDictionary *)JSON);
} failure:^(NSURLSessionDataTask *__unused task, NSError *error) {
NSLog(@"%@",error);
}];
使用实例 2 -html
ios9 webview 访问https 网址,各种坑,直接使用 afnetworking 简单易用:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[ZXJAppHTTPClient sharedHtmlSVRClient] POST:@"test.html" parameters:nil progress:nil success:^(NSURLSessionDataTask * __unused task, id responseObject) {
NSLog(@"成功 ");
self.webView.delegate =self;
[self.webView loadData:responseObject MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@"https://baseUrl/test.html"]];
} failure:^(NSURLSessionDataTask *__unused task, NSError *error) {
NSLog(@"失败 %@",error);
}];
注:文章转录自CSDNRoselind的小屋,仅供大家参考使用 http://blog.csdn.net/qq_16086969/article/details/50543378