zoukankan      html  css  js  c++  java
  • iOS网络请求 添加全局代理 NSURLSessionConfiguration 解决方案

    1、最近做项目、文件存储服务器是用的亚马逊的、如果直接访问、下载其资源速度很慢、所以需要在网络请求的时候添加一个代理、加速网络访问

    2、代理服务器是一个HTTPS 的一个服务器

    3、思路、解决方案、利用运行时机制(添加分类NSURLSession+Change)针对  NSURLSession 初始化添加代理对所有的网络请求进行拦截处理

    #import "NSURLSession+Change.h"
    
    @implementation NSURLSession (Change)
    +(void)load{
        Method oldMethod = class_getClassMethod(self, @selector(sessionWithConfiguration:delegate:delegateQueue:));
        Method newMethod = class_getClassMethod(self, @selector(newSessionWithConfiguration:delegate:NSURLSessiondelegateQueue:));
        
        Method oldMethod1 = class_getClassMethod(self, @selector(sessionWithConfiguration:));
        Method newMethod1 = class_getClassMethod(self, @selector(newSessionWithConfiguration:));
          
         method_exchangeImplementations(oldMethod1, newMethod1);
         method_exchangeImplementations(oldMethod, newMethod);
    }
    + (NSURLSession *)newSessionWithConfiguration:(NSURLSessionConfiguration *)configuration{
        configuration=[self newConfiguration:configuration];
        NSURLSession *section=
           [self newSessionWithConfiguration:configuration];
           return section;
    }
    + (NSURLSession *)newSessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate NSURLSessiondelegateQueue:(nullable NSOperationQueue *)queue{
        configuration=[self newConfiguration:configuration];
        NSURLSession *section=
        [self newSessionWithConfiguration:configuration delegate:delegate NSURLSessiondelegateQueue:queue];
        return section;
    }
    #pragma mark  添加代理,加速网络请求
    +(NSURLSessionConfiguration *)newConfiguration:(NSURLSessionConfiguration *)configuration{
    //通过服务器配置HTTPS代理
        NSString *proxy=@"";
        NSInteger port=;
        configuration.connectionProxyDictionary = @{
              @"HTTPEnable":@YES,
              @"HTTPProxy":proxy,
              @"HTTPPort":@(port),
              @"HTTPSEnable":@YES,
              @"HTTPSProxy":proxy,
              @"HTTPSPort":@(port),
          };
        NSString *user=@"";
        NSString *password=@"";
        NSString* proxyIDPasswd = [NSString stringWithFormat:@"%@:%@",user,password];
        NSData* proxyoriginData = [proxyIDPasswd dataUsingEncoding:NSUTF8StringEncoding];
        NSString *base64EncodedCredential = [proxyoriginData base64EncodedStringWithOptions:0];
        NSString *authString = [NSString stringWithFormat:@"Basic: %@", base64EncodedCredential];
        configuration.HTTPAdditionalHeaders = @{@"Proxy-Authorization": authString};
        return configuration;
    }
    @end
  • 相关阅读:
    线程安全-003-对象锁的同步和异步
    线程安全-002-多个线程多把锁&类锁
    线程安全-001
    FastDFS单节点安装
    Nginx+Keepalived 实现高可用
    linux下配置nginx负载均衡例子
    linux下配置nginx反向代理例子
    Linux命令
    nginx配置文件 nginx.conf 说明
    CentOS安装Nginx 以及日志管理
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/12188377.html
Copyright © 2011-2022 走看看