Swift:AlamofireHTTP代理
我似乎找不到使用代理创建http请求的方法,比如说我有一个Sock5代理或http代理,我如何通过代理创建GET/POST请求,而不必将代理应用于系统 我只希望单个请求通过代理 假设我使用Alamofire创建了一个http请求,那么请求将通过我的ip地址发送,但是如果我想应用http代理或socks5代理来发送请求呢 假设我提出这样的请求:Swift:AlamofireHTTP代理,swift,alamofire,nsurlsession,http-proxy,socks,Swift,Alamofire,Nsurlsession,Http Proxy,Socks,我似乎找不到使用代理创建http请求的方法,比如说我有一个Sock5代理或http代理,我如何通过代理创建GET/POST请求,而不必将代理应用于系统 我只希望单个请求通过代理 假设我使用Alamofire创建了一个http请求,那么请求将通过我的ip地址发送,但是如果我想应用http代理或socks5代理来发送请求呢 假设我提出这样的请求: Alamofire.request("https://httpbin.org/get").responseJSON { response in
Alamofire.request("https://httpbin.org/get").responseJSON { response in
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
如何将http或socks代理应用于此请求?
似乎找不到有关它的任何信息。取自线程:
您可以创建代理详细信息:
struct ProxyItem: Equatable, Hashable {
let host: String
let port: String
let HTTPOnly = true
var hashValue: Int {
return host.hashValue ^ port.hashValue
}
}
然后创建代理配置
var proxyConfiguration = [NSObject: AnyObject]()
proxyConfiguration[kCFNetworkProxiesHTTPProxy] = item.host
proxyConfiguration[kCFNetworkProxiesHTTPPort] = port
proxyConfiguration[kCFNetworkProxiesHTTPEnable] = 1
设置Alamo配置:
let sessionConfiguration = AFManager.sharedInstance.session.configuration
sessionConfiguration.connectionProxyDictionary = proxyConfiguration
manager = Alamofire.Manager(configuration: sessionConfiguration)
从该配置创建alamo manager:
let sessionConfiguration = AFManager.sharedInstance.session.configuration
sessionConfiguration.connectionProxyDictionary = proxyConfiguration
manager = Alamofire.Manager(configuration: sessionConfiguration)
最后,使用管理器连接到您的代理:
manager.request(.GET, urlString)
.response {
(request, response, data, error) in
if let response = response {
var statusCode = response.statusCode
println("-->statusCode: \(statusCode)")
}
if (error == nil) {
var serializationError: NSError?
let jsonData: AnyObject? = NSJSONSerialization.JSONObjectWithData(data! as! NSData, options: NSJSONReadingOptions.AllowFragments, error: &serializationError)
var parser: Parser = Parser()
let menu: Menu = parser.parseMenuJSON(jsonData)
var dataAccess: DataAccess = DataAccess.sharedInstance
dataAccess.addMenu(menu)
} else {
println("Webservice error: \(error)")
}
}
Alamofire关于代理的文档是什么?你努力了吗?Alamofire的文档中没有提到任何关于代理和/或袜子的内容。除非我自己解决不了这个问题,否则我不会在这里发问覆盖SessionDelegate的默认实现的另一种方法是将其子类化。子类化允许您完全自定义API的行为,或者为API创建代理,并且仍然使用默认实现。通过创建代理,您可以记录事件、发出通知、提供挂接前和挂接后的实现等。下面是一个快速示例,说明如何在发生重定向时对SessionDelegate进行子类化并记录消息。“你读过我的问题吗?这与HTTP代理和/或Sock代理无关。@steelzeh当您向HTTP代理发出请求时,您不使用get/post,而是使用connect。然后,代理通过使用get/post请求将您连接到终端主机。谢谢,我们将对此进行测试。