ProxyResolver 0.3.1

ProxyResolver 0.3.1

Mikhail Churbanov维护。



ProxyResolver

CI Status Swift Version Carthage Carthage License Platform

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

用法示例

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

特性

支持的系统配置

  • 自动代理发现*
  • 自动代理配置 URL*
  • Web 代理 (HTTP)
  • 安全 Web 代理 (HTTPS)
  • SOCKS 代理
  • FTP 代理
  • 流式代理 (RTSP)
  • Gopher 代理

* 由于 ATS 保护,自动配置的 URL 应该是 HTTPS 或包含 *.local 或不可全局解析的域名,否则您需要设置 plist 中的 NSAllowsLocalNetworking 键。更多信息请参见 NSAppTransportSecurity 参考

其他特性

  • 支持需要密码的代理

Proxy.credentials 将自动访问 Proxy 键链以检索代理账户和用户名。由于它需要用户权限,因此凭证是按需检索的,仅在尝试获取它们时才进行检索。


  • 可配置

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


  • 适用于 Apple 推荐

通常情况下,您应该尝试使用数组中的第一个代理下载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
    }
}

  • 文档

待定

要求

  • Swift: 4+
  • macOS: 10.10+

安装

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套接字的Starscream代理支持PR启发的。

Mikhail Churbanov, [email protected]

许可证

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