如何与Alamofire 4和Swift 3一起使用代理服务器

请不要标记为重复,我还没有能够解决与现有的线程我的问题。

我试图使用我的代理服务器需要一个指定的IP的API请求。 为了debugging我的问题,我正在从web服务请求IP。

这是我现在的代码:

import UIKit import Alamofire class ViewController: UIViewController { var requestManager = Alamofire.SessionManager.default override func viewDidLoad() { super.viewDidLoad() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(true) var proxyConfiguration = [NSObject: AnyObject]() proxyConfiguration[kCFNetworkProxiesHTTPProxy] = "http://xxx@eu-west-static-01.quotaguard.com" as AnyObject? proxyConfiguration[kCFNetworkProxiesHTTPPort] = "9293" as AnyObject? proxyConfiguration[kCFNetworkProxiesHTTPEnable] = 1 as AnyObject? let cfg = Alamofire.SessionManager.default.session.configuration cfg.connectionProxyDictionary = proxyConfiguration let ip = URL(string: "https://api.ipify.org?format=json") requestManager = Alamofire.SessionManager(configuration: cfg) requestManager.request(ip!).response { response in print("Request: \(response.request)") print("Response: \(response.response)") print("Error: \(response.error)") if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) { print("Data: \(utf8Text)") } } } } 

问题:响应的IP是否与proxyConfiguration相同。 任何帮助,非常感激。

PS:使用的物理设备。

我认为工作(应该被弃用)键是:

 kCFStreamPropertyHTTPSProxyHost kCFStreamPropertyHTTPSProxyPort 

你可以试试这个代码?

 import UIKit import Alamofire class ViewController: UIViewController { var requestManager = Alamofire.SessionManager.default override func viewDidLoad() { super.viewDidLoad() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(true) var proxyConfiguration = [NSObject: AnyObject]() proxyConfiguration[kCFNetworkProxiesHTTPProxy] = "eu-west-static-01.quotaguard.com" as AnyObject? proxyConfiguration[kCFNetworkProxiesHTTPPort] = "9293" as AnyObject? proxyConfiguration[kCFNetworkProxiesHTTPEnable] = 1 as AnyObject? proxyConfiguration[kCFStreamPropertyHTTPSProxyHost as String] = "eu-west-static-01.quotaguard.com" proxyConfiguration[kCFStreamPropertyHTTPSProxyPort as String] = 9293 proxyConfiguration[kCFProxyUsernameKey as String] = xxx //proxyConfiguration[kCFProxyPasswordKey as String] = "pwd if any" let cfg = Alamofire.SessionManager.default.session.configuration cfg.connectionProxyDictionary = proxyConfiguration let ip = URL(string: "https://api.ipify.org?format=json") requestManager = Alamofire.SessionManager(configuration: cfg) requestManager.request(ip!).response { response in print("Request: \(response.request)") print("Response: \(response.response)") print("Error: \(response.error)") if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) { print("Data: \(utf8Text)") } } } } 

另外请确保您的代理服务器configuration为处理https请求。

注意:这可能会给这些键提供deprecated警告,但键仍在工作(请参阅https://forums.developer.apple.com/thread/19356#131446

注意:我在这里发布了相同的答案。 在这里发布同样适用于此处。 Alamofire使用相同的URLSessionConfiguration

基于Manishg的回答,我使用以下方法来避免警告

 let configuration = URLSessionConfiguration.default configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders var proxyConfiguration = [String: AnyObject]() proxyConfiguration.updateValue(1 as AnyObject, forKey: "HTTPEnable") proxyConfiguration.updateValue("eu-west-static-01.quotaguard.com" as AnyObject, forKey: "HTTPProxy") proxyConfiguration.updateValue(9293 as AnyObject, forKey: "HTTPPort") proxyConfiguration.updateValue(1 as AnyObject, forKey: "HTTPSEnable") proxyConfiguration.updateValue("eu-west-static-01.quotaguard.com" as AnyObject, forKey: "HTTPSProxy") proxyConfiguration.updateValue(9293 as AnyObject, forKey: "HTTPSPort") configuration.connectionProxyDictionary = proxyConfiguration sharedManager = Alamofire.SessionManager(configuration: configuration) 

https常量已被弃用,可随时删除。 通过使用string值,代码可能会中断,但不会崩溃