【问题标题】:Swift: Alamofire HTTP ProxySwift:Alamofire HTTP 代理
【发布时间】:2017-04-22 08:19:04
【问题描述】:

我似乎无法找到使用代理创建 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 代理应用于此请求? 似乎找不到任何关于它的信息。

【问题讨论】:

  • Alamofire 的代理文档是什么?你努力了吗?
  • Alamofire 的文档没有提到任何关于代理和/或袜子的内容。不会在这里问,除非我自己解决不了问题。
  • 它说“覆盖 SessionDelegate 的默认实现的另一种方法是对其进行子类化。子类化允许您完全自定义 API 的行为或为 API 创建代理并仍然使用默认实现. 创建代理允许您记录事件、发出通知、提供前和后挂钩实现等。这是一个简单的示例,它是 SessionDelegate 的子类化并在发生重定向时记录消息。"
  • 你有没有阅读我的问题?这与 HTTP 代理和/或 Sock 代理无关。
  • @steelzeh 当您向不执行获取/发布的 http 代理发出请求时,您使用连接。然后,代理会使用 get/post 请求将您连接到终端主机。

标签: swift alamofire nsurlsession http-proxy socks


【解决方案1】:

取自this线程:

您创建代理详细信息:

 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

从此配置创建一个 alamo 管理器:

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)")
    }
}

【讨论】:

  • 谢谢,会测试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 2011-06-23
  • 2014-02-08
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多