iOS 9 AFNetworking3.x 使用整理 (https)
簡述
AFNetworking 是輕量級的網絡庫侨糟,使用它 非常方便碍扔。以前使用AFNetworking 1.x 訪問 https 只是 配置一個宏,但最近升級AFNetworking 3.x 訪問 https接口 時出現(xiàn)了各種問題 如code =9813 的這種錯誤 秕重,解決過程也是在網上查的結果不同,各種的試還是不成功。主要是 忽略了證書的導入溶耘,和 AFNetworking 的AFSecurityPolicy配置不正確二拐。所以你 一定要記得去向 服務器開發(fā)人員和部署人員 要證書,要不肯定不行凳兵。百新。。
導入 AFNetworking
方式 1:
下載AFNetworking, 解壓后把里面的 AFNetworking 文件夾拖入你的項目
方式 2:
當然你也可以使用cocopod 將AFNetworking 加載到你的項目庐扫。在命令行 cd 到你工程的主目錄下輸入命令 vi Podfile 饭望,即創(chuàng)建 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 進行簡單的封裝 铅辞,這樣可以對網絡請求相關的統(tǒng)一管理。如:
//
// 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