Swift 隧道代理:Alamofire 与 URLSession 两种实现
Swift Alamofire 和 URLSession 对接亿牛云爬虫代理。
亿牛云技术团队2026年4月27日1 分钟阅读
URLSession
URLSession 通过 URLProxy 配置代理:
import Foundation
let host = ProcessInfo.processInfo.environment["PROXY_HOST"] ?? "t.16yun.cn"
let port = ProcessInfo.processInfo.environment["PROXY_PORT"] ?? "31111"
let proxyDict: [AnyHashable: Any] = [
"HTTPEnable": 1,
"HTTPProxy": host,
"HTTPPort": Int(port) ?? 31111,
"HTTPSEnable": 1,
"HTTPSProxy": host,
"HTTPSPort": Int(port) ?? 31111,
]
let config = URLSessionConfiguration.default
config.connectionProxyDictionary = proxyDict
// 代理认证通过 URLCredential
let session = URLSession(configuration: config)
let task = session.dataTask(with: URL(string: "https://httpbin.org/ip")!) { data, _, _ in
if let data = data, let body = String(data: data, encoding: .utf8) {
print(body)
}
}
task.resume()
sleep(2)
Alamofire
import Alamofire
let host = ProcessInfo.processInfo.environment["PROXY_HOST"] ?? "t.16yun.cn"
let port = ProcessInfo.processInfo.environment["PROXY_PORT"] ?? "31111"
let proxyDict: [AnyHashable: Any] = [
kCFNetworkProxiesHTTPEnable: true,
kCFNetworkProxiesHTTPProxy: host,
kCFNetworkProxiesHTTPPort: Int(port) ?? 31111,
kCFNetworkProxiesHTTPSEnable: true,
kCFNetworkProxiesHTTPSProxy: host,
kCFNetworkProxiesHTTPSPort: Int(port) ?? 31111,
]
let config = URLSessionConfiguration.default
config.connectionProxyDictionary = proxyDict
let session = Session(configuration: config)
session.request("https://httpbin.org/ip").responseString { resp in
if let body = resp.value {
print(body)
}
}
两种方案对比
| 特性 | URLSession | Alamofire |
|---|---|---|
| 依赖 | 无(系统库) | 需 SPM/CocoaPods |
| 代理配置 | connectionProxyDictionary | 同 URLSession |
| 代理认证 | URLCredential | URLCredential |
| API 风格 | 回调 + delegate | 链式 .response |
需要企业代理方案?
我们可根据目标站点、并发规模与稳定性目标提供定制方案。