Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:AlamofireHTTP代理_Swift_Alamofire_Nsurlsession_Http Proxy_Socks - Fatal编程技术网

Swift:AlamofireHTTP代理

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

我似乎找不到使用代理创建http请求的方法,比如说我有一个Sock5代理或http代理,我如何通过代理创建GET/POST请求,而不必将代理应用于系统

我只希望单个请求通过代理

假设我使用Alamofire创建了一个http请求,那么请求将通过我的ip地址发送,但是如果我想应用http代理或socks5代理来发送请求呢

假设我提出这样的请求:

    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请求将您连接到终端主机。谢谢,我们将对此进行测试。