代理解析器

CI Status Swift Version Carthage Carthage License Platform

ProxyResolver 允许从用户系统配置中简单地解析实际的代理信息,并且可以用于设置基于流的连接,例如用于 WebSockets。

使用示例

import ProxyResolver

let proxy = ProxyResolver()
let url = URL(string: "https://github.com")!
proxy.resolve(for: url) { result in
  switch result {
    case .direct:
      // Direct connection allowed - no proxy required
      break
    case .proxy(let proxy):
      // here you can establish connection to proxy or whatever you want
      // proxy.type - one of ProxyType enum: .http, .https or .socks
      // proxy.host - host name of proxy to use
      // proxy.port - port number
      break
    case .error(let error):
      // Handle error
      break
  }
}

功能

支持的系统配置

* 由于 ATS 保护,自动配置 URL 应该是 HTTPS 或具有 *.local 或无法全局解析的域名,否则您需要在 plist 中设置 NSAllowsLocalNetworking 键。 更多信息可以在 NSAppTransportSecurity 参考 中找到。

其他功能

Proxy.credentials 将自动访问 Proxy 钥匙串以检索为代理帐户和密码配置的信息。 由于这需要用户许可,因此凭据仅在您尝试获取它们时才会被延迟检索。


您可以使用自定义代理配置提供程序而不是系统提供程序,或者提供您自己的获取器来下载自动配置脚本,而不是基于 NSURLSession 的默认获取器。


“一般来说,您应该尝试使用数组中的第一个代理下载 URL,如果第一个代理失败,则尝试第二个代理,依此类推。” - 如 CFNetworkCopyProxiesForURL 方法的文档中所述。

使用 ProxyResolverDelegate,您可以尝试连接到已解析的代理,并且在出现任何问题或者您只是想检索所有代理的情况下 - 如果仍有任何代理配置可用,则继续解析。

class CustomDelegate: ProxyResolverDelegate {
  func proxyResolver(_ proxyResolver: ProxyResolver, didResolve result: ProxyResolutionResult, for url: URL, resolveNext: ResolveNextRoutine?) {
    switch result {
    case .direct:
      // no proxy required - try to connect to your 'url' directly
      break
    case .proxy(let proxy):
      // try connect to your 'url' using resolved 'proxy'
      yourConnectMethod(to: url, using: proxy) { (response, error) in
        if let error = error {
          // If connection failed we will try to resolve next proxy if
          // available and retry connection
          resolveNext?()
        }
      }
    case .error(let error):
      // handle error
      break
    }
}

待定

要求

安装

CocoaPods

要安装它,请将以下行添加到 Podfile

pod 'ProxyResolver'

例如

use_frameworks!

target 'TestPackagesForProxyResolver' do
  platform :osx, '10.12'
  pod 'ProxyResolver'
end

Carthage

要安装它,请将以下行添加到 Cartfile

GitHub "rinold/ProxyResolver"

Swift Package Manager

要安装它,请将以下软件包添加到需要的 Packages.swift 依赖项中

.package(url: "https://github.com/rinold/ProxyResolver.git", from: "0.3.0")

例如

// swift-tools-version:4.0
import PackageDescription

let package = Package(
    name: "TestPackagesForProxyResolver",
    products: [
        .executable(name: "TestPackagesForProxyResolver", targets: ["TestPackagesForProxyResolver"]),
    ],
    dependencies: [
        .package(url: "https://github.com/rinold/ProxyResolver.git", from: "0.3.0"),
    ],
    targets: [
        .target(
            name: "TestPackagesForProxyResolver",
            dependencies: ["ProxyResolver.git"]),
    ]
)

版本控制

我们使用 SemVer 进行版本控制。 有关可用版本,请参阅此仓库上的 标签

作者

ProxyResolver 最初的灵感来自于 web sockets Starscream 代理支持 PR

Mikhail Churbanov, mihail.churbanov@gmail.com

许可证

ProxyResolver 在 MIT 许可证下可用。 有关更多信息,请参阅 LICENSE 文件。