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
  • 相关阅读:
    replace函数的使用(替换单个和全局)
    数据库记录删除方式
    UDP接收百万级数据的解决方案
    早睡早起+微信朋友圈控制在10人以内…
    java Date型时间比较大小
    教会你时间管理的奥秘,提升工作效率。
    大多数人都输给了这个字——等
    二分法查找和普通查找
    王者荣耀里拿个王者有啥了不起,有胆就来挑战一下ApsaraCache源码
    给予Java初学者的学习路线建议
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/12188377.html
Copyright © 2011-2022 走看看