永发信息网

https://m.baidu.com/from=1014517c/bd_page_type=1/

答案:2  悬赏:0  手机版
解决时间 2021-02-07 02:09
  • 提问者网友:蓝莓格格巫
  • 2021-02-06 06:31
https://m.baidu.com/from=1014517c/bd_page_type=1/
最佳答案
  • 五星知识达人网友:詩光轨車
  • 2021-02-06 07:51
NSURL *url = [NSURL URLWithString:@"https://www.google.com"];
AFHTTPRequestOperationManager *requestOperationManager = [[AFHTTPRequestOperationManager alloc]initWithBaseURL:url];
dispatch_queue_t requestQueue = dispatch_create_serial_queue_for_name("kRequestCompletionQueue");
requestOperationManager.completionQueue =requestQueue;

AFSecurityPolicy * securityPolicy =[AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

//allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
//如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates =YES;

//validatesDomainName 是否需要验证域名,默认为YES;
//如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
//因为SSL证书上的域名是独立的,假如证书上绑定的域名是www.domain.com,那么mail.domain.com是无法验证通过的;如果需要同时验证主域名和子域名,可以申请通配符的域名*.domain.com来解决,即证书上绑定domain.com下的所有二级子域。
securityPolicy.validatesDomainName = YES;
//validatesCertificateChain 是否验证整个证书链,默认为YES
//设置为YES,会将服务器返回的TrustObject上的证书链与本地导入的证书进行对比。
//假如是信任的CA所签发的证书,则建议关闭该验证,因为整个证书链一一比对是完全没有必要(请查看源代码);
securityPolicy.validatesCertificateChain =NO;

requestOperationManager.securityPolicy =securityPolicy;

另afnetworking 3.0.0以上版本用的是AFHTTPSessionManager

 AFHTTPSessionManager * manager =[AFHTTPSessionManager manager];
   NSString * cerPath = [[NSBundle mainBundle]pathForResource:@"server" ofType:@"cer"];
   NSData * cerData = [NSData dataWithContentsOfFile:cerPath];
   NSLog(@"%@", cerData);
   manager.securityPolicy = [AFSecurityPolicypolicyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSArrayalloc] initWithObjects:cerData, nil]];
   manager.securityPolicy.allowInvalidCertificates = YES;
   [manager.securityPolicy setValidatesDomainName:NO];
   manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer= [AFJSONResponseSerializer serializer];
   NSDictionary * parameter = @{@"username":self.username,@"password":self.password};
   [manager POST:@"https://192.168.1.4:9777" parameters:parametersuccess:^(NSURLSessionDataTask * task, id responseObject) {
       NSLog(@"success %@", responseObject);
       }
       failure:^(NSURLSessionDataTask * task, NSError * error) {
           NSLog(@"failure %@", error);
       }]

   NSAppTransportSecurity
   
        NSAllowsArbitraryLoads//设置为 YES,解除整个app的ATS限制;但是通过NSExceptionDomains进行的配置依然有效
       
       NSAllowsArbitraryLoadsInMedia //设置为 YES,解除通过AVFoundation框架访问媒体内容时的ATS 限制
       
       NSAllowsArbitraryLoadsInWebContent //设置为 YES,解除通过webview发出的网络请求的ATS限制
       
       NSAllowsLocalNetworking //设置为 YES,使得app可以载入任意本地资源,但不影响app的总体 ATS 策略
       
全部回答
  • 1楼网友:傲气稳了全场
  • 2021-02-06 08:35
思想的痼疾治得愈慢,行动的恶果现得愈快。 专制的淤泥积得愈多,文明的花朵开得愈少。 这样不知道行不行?自己想的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯