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

两种方案对比

特性URLSessionAlamofire
依赖无(系统库)需 SPM/CocoaPods
代理配置connectionProxyDictionary同 URLSession
代理认证URLCredentialURLCredential
API 风格回调 + delegate链式 .response

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。