ProxyResolver
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文件。