AFN与HTTPS之二:iOS中使用AFN发起HTTPS请求
使用Xcode新建测试工程并导入 AFNetworking 框架
将上个教程中生成的server.csr文件导入工程中
- (void)afnRequest {
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:kServerRoot] sessionConfiguration:configuration];
[manager setSecurityPolicy:[self customSecurityPolicy]];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"application/x-javascript", nil];
NSString *url = @"https://127.0.0.1";
NSURLSessionDataTask *task = [manager POST:url parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@?%@:%@", url, nil, responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error: %@", error);
}];
[task resume];
}
- (AFSecurityPolicy *)customSecurityPolicy {
NSMutableSet *cerSet = [NSMutableSet set];
[cerSet addObject:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"iphone" ofType:@"cer"]]];
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// 设置证书
[policy setPinnedCertificates:cerSet];
// 信任非法证书(自签名证书)
[policy setAllowInvalidCertificates:YES];
// 是否验证域名
[policy setValidatesDomainName:NO];
return policy;
}
调用 request 方法后,日志输出
https://127.0.0.1?(null):{
error = 0;
}

浙公网安备 33010602011771号