zoukankan      html  css  js  c++  java
  • 第1年5月6日 iOS 拦截网络请求后进行网址或ip替换

    1.

    #import "ReplaceURLProtocol.h"
    // 为了避免canInitWithRequest和canonicalRequestForRequest的死循环
    static NSString *const URLProtocolHandledKey = @"URLProtocolHandledKey";
     
    // 老url网址
    static NSString *const  old_url = @"baidu.com";
    // 新url网址
    static NSString *const  new_url = @"google.com";
    @interface ReplaceURLProtocol()<NSURLSessionDelegate>
    @property(nonatomic,strong)NSURLSession * session;
    @end
     
    @implementation ReplaceURLProtocol
    +(BOOL)canInitWithRequest:(NSURLRequest *)request
    {
      return YES;
    }
    //改变请求request
    +(NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
    {
     // 业务逻辑写这里
      return request;
    }
     
    //开始请求
    -(void)startLoading
    {
     //业务逻辑写这里
    }
     
    //停止请求
    -(void)stopLoading
    {
    }
     
    #pragma mark ---- NSURLSessionDelegate
    /*
      NSURLSessionDelegate接到数据后,通过URLProtocol传出去
     */
    - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
    {
      if (error)
      {
        [self.client URLProtocol:self didFailWithError:error];
      }
      else
      {
        [self.client URLProtocolDidFinishLoading:self];
      }
    }
     
    - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
      
      [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
      completionHandler(NSURLSessionResponseAllow);
      
    }
     
    - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
    {
      [self.client URLProtocol:self didLoadData:data];
    }
     
    @end

    https://blog.csdn.net/zhangzeshuai/article/details/106934481

  • 相关阅读:
    【前端】原生event对象和jquery event对象的区别
    【前端】js代码模拟用户键盘鼠标输入
    【前端】回到顶部
    【前端】Three.js
    【前端】三种复制数组的方法
    【Python】Django
    【前端】CommonJS的模块加载机制
    注释声明:TODO HACK XXX FIXME REVIEW
    【Python】Python3中的str和bytes
    【前端】iterable类型的 forEach方法
  • 原文地址:https://www.cnblogs.com/javastart/p/14733724.html
Copyright © 2011-2022 走看看