博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Alamofire动态Proxy,报出FAILURE: Error Domain=NSURLErrorDomain Code=-999 "cancelled"
阅读量:7066 次
发布时间:2019-06-28

本文共 2193 字,大约阅读时间需要 7 分钟。

使用Alamofire网络框架时,项目中需要动态替换 Proxy,使用 Alamofire 代码如下:

static var requestManager = Alamofire.SessionManager()let cfg = Alamofire.SessionManager.default.session.configurationcfg.connectionProxyDictionary = [    kCFNetworkProxiesHTTPEnable: true,    kCFNetworkProxiesHTTPPort: 80,    kCFNetworkProxiesHTTPProxy: ip]requestManager = Alamofire.SessionManager(configuration: cfg)requestManager.request(...)复制代码

connectionProxyDictionary中的Proxy,需要是动态的,随时可能变化。但是使用此方法会报出一个错误

FAILURE: Error Domain=NSURLErrorDomain Code=-999 "cancelled"

在使用Alamofire时,官方推荐使用单利来完成初始化,不然就会报出上面的错误。

抱着试试的态度使用系统的URLSession来做这件事,代码如下:

var dataTask: URLSessionDataTask?//        curl -v "http://xxxxx/uaa/apid/member/code/get" -x "47.91.236.123:80"        let url = URL(string: "http://xxxxx/uaa/apid/member/code/get")        let configuration = URLSessionConfiguration.default        configuration.timeoutIntervalForRequest = 30        configuration.connectionProxyDictionary = [            kCFNetworkProxiesHTTPEnable: true,            kCFNetworkProxiesHTTPPort: 80,            kCFNetworkProxiesHTTPProxy: "47.91.236.123"        ]        let session = URLSession(configuration: configuration)        dataTask = session.dataTask(with: url!) { (data, response, error) in            print("----------------------\n")            if let result = data {                let str = String(data: result, encoding: String.Encoding.utf8)                print("result \(String(describing: str))")            }            if let msg = error {                print(msg.localizedDescription)            }            print("----------------------\n")        }        dataTask?.resume()复制代码

这样居然可以完成达到这个目的,然后我们就把整个Network层换了。 /(ㄒoㄒ)/~~ 真是个蛋疼的问题!!!!


其实使用Alamofire也可以完成

  1. 需要监听你的Ip变化
  2. 变化了,就重新创建一个Alamofire实例 代码如下:
final class Network {    static let shared: SessionManager = {        let configuration = URLSession.default        cconfiguration.timeoutIntervalForRequest = 30        configuration.connectionProxyDictionary = [            kCFNetworkProxiesHTTPEnable: true,            kCFNetworkProxiesHTTPPort: 80,            kCFNetworkProxiesHTTPProxy: "47.91.236.123"        ]        return SessionManager(configuration: configuration)    }()}复制代码

转载地址:http://xwoll.baihongyu.com/

你可能感兴趣的文章
java 单例模式
查看>>
IIS8 使用FastCGI配置PHP环境支持 过程详解
查看>>
互联网TCP/IP五层模型(一)
查看>>
ftrace 简介【转】
查看>>
用H5中的Canvas等技术制作海报
查看>>
python正则表达式匹配时间和IP地址
查看>>
TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议
查看>>
【三石jQuery视频教程】01.图片循环展示
查看>>
matlab std函数 用法及实例
查看>>
【linux shell系列--1】crontab命令
查看>>
求一个集合的集合下所有集合元素求值
查看>>
电脑运行 apk
查看>>
PHPExcel读取Excel文件
查看>>
最近写的一个Win8的看漫画程序
查看>>
centos中使用python遇到的几个问题
查看>>
JBOSS在win7环境下启动run.bat无反应
查看>>
java B2B2C 多租户电子商城系统-SpringCloud动态刷新配置信息
查看>>
大姨妈VS美柚:她经济的归宿是AI医疗还是社区电商
查看>>
向左走,向右走,P2P平台的必然命运
查看>>
Swift单例模式
查看>>