请不要标记为重复,我无法使用现有线程解决我的问题.
我正在尝试使用我的Proxy来获取需要指定IP的API请求.
要调试我的问题,我正在从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,encoding: .utf8) { print("Data: \(utf8Text)") } } } }
还请确保您的代理服务器配置为处理https请求.
注意:它可能会为这些键提供不推荐的警告,但键仍然工作(请参阅https://forums.developer.apple.com/thread/19356#131446)
注意:我发布了同样的答案here.同样适用于这里. Alamofire正在使用相同的URLSessionConfiguration.