Перейти до вмісту
Гайды 2 хв читання 21 переглядів

Використання проксі у Swift

Налаштування проксі у Swift для iOS та macOS: URLSession, фреймворк Network, SOCKS5 та системна конфігурація.

Використання проксі у Swift

Використання проксі в Swift

Проксі в Swift

Swift — це основна мова для розробки додатків для iOS та macOS. Робота з проксі в Swift здійснюється через URLSession (високорівневий API), фреймворк Network (низькорівневий) та системні налаштування.

URLSession з проксі

Конфігурація через URLSessionConfiguration

import Foundation

let config = URLSessionConfiguration.default

// Конфігурація HTTP проксі
config.connectionProxyDictionary = [
    kCFNetworkProxiesHTTPEnable: true,
    kCFNetworkProxiesHTTPProxy: "proxy_ip",
    kCFNetworkProxiesHTTPPort: 8080,
    kCFNetworkProxiesHTTPSEnable: true,
    kCFNetworkProxiesHTTPSProxy: "proxy_ip",
    kCFNetworkProxiesHTTPSPort: 8080
]

let session = URLSession(configuration: config)

let url = URL(string: "https://httpbin.org/ip")!
let task = session.dataTask(with: url) { data, response, error in
    if let data = data, let body = String(data: data, encoding: .utf8) {
        print(body)
    }
}
task.resume()

SOCKS Проксі

config.connectionProxyDictionary = [
    kCFStreamPropertySOCKSProxyHost: "proxy_ip",
    kCFStreamPropertySOCKSProxyPort: 1080,
    kCFStreamPropertySOCKSVersion: kCFStreamSocketSOCKSVersion5
]

З автентифікацією

config.connectionProxyDictionary = [
    kCFNetworkProxiesHTTPEnable: true,
    kCFNetworkProxiesHTTPProxy: "proxy_ip",
    kCFNetworkProxiesHTTPPort: 8080,
    kCFProxyUsernameKey: "username",
    kCFProxyPasswordKey: "password"
]

Системні налаштування проксі

Автоматичне використання

За замовчуванням URLSession використовує системні проксі:

let config = URLSessionConfiguration.default
// Використовує системні проксі за замовчуванням
let session = URLSession(configuration: config)

Якщо користувач налаштував проксі в системних налаштуваннях iOS/macOS, URLSession автоматично використовуватиме їх.

PAC Файл

config.connectionProxyDictionary = [
    kCFNetworkProxiesProxyAutoConfigEnable: true,
    kCFNetworkProxiesProxyAutoConfigURLString: "http://example.com/proxy.pac"
]

Обробка запиту на автентифікацію проксі

Коли проксі вимагає автентифікації, URLSession викликає свого делегата:

class ProxyDelegate: NSObject, URLSessionDelegate {
    func urlSession(
        _ session: URLSession,
        didReceive challenge: URLAuthenticationChallenge,
        completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void
    ) {
        if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodHTTPBasic
            && challenge.protectionSpace.isProxy {
            let credential = URLCredential(
                user: "username",
                password: "password",
                persistence: .forSession
            )
            completionHandler(.useCredential, credential)
        } else {
            completionHandler(.performDefaultHandling, nil)
        }
    }
}

let delegate = ProxyDelegate()
let session = URLSession(configuration: config, delegate: delegate, delegateQueue: nil)

Фреймворк Network (NWConnection)

Для низькорівневих мережевих операцій в iOS 12+ / macOS 10.14+:

import Network

let proxyConfig = NWProtocolTLS.Options()
let params = NWParameters.tls

// Конфігурація проксі через NWEndpoint
let proxyEndpoint = NWEndpoint.hostPort(
    host: NWEndpoint.Host("proxy_ip"),
    port: NWEndpoint.Port(rawValue: 8080)!
)

// Створення з'єднання
let connection = NWConnection(
    host: "httpbin.org",
    port: 443,
    using: params
)

connection.stateUpdateHandler = { state in
    switch state {
    case .ready:
        print("Connected")
    case .failed(let error):
        print("Failed: \(error)")
    default:
        break
    }
}

connection.start(queue: .global())

Alamofire з проксі

Alamofire — це популярна Swift HTTP бібліотека:

import Alamofire

let config = URLSessionConfiguration.default
config.connectionProxyDictionary = [
    kCFNetworkProxiesHTTPEnable: true,
    kCFNetworkProxiesHTTPProxy: "proxy_ip",
    kCFNetworkProxiesHTTPPort: 8080
]

let session = Session(configuration: config)

session.request("https://httpbin.org/ip").response { response in
    if let data = response.data, let body = String(data: data, encoding: .utf8) {
        print(body)
    }
}

Особливості iOS

VPN та проксі в iOS

iOS дозволяє конфігурувати проксі через:
1. Системні налаштування (Налаштування → Wi-Fi → HTTP Проксі)
2. MDM профілі
3. NEProxySettings (фреймворк Network Extension)

Network Extension

Щоб створити повноцінний проксі-додаток на iOS, використовуйте NETransparentProxyProvider:

import NetworkExtension

class ProxyProvider: NETransparentProxyProvider {
    override func startProxy(options: [String: Any]?, completionHandler: @escaping (Error?) -> Void) {
        // Конфігурація проксі
        completionHandler(nil)
    }

    override func handleNewFlow(_ flow: NEAppProxyFlow) -> Bool {
        // Обробка нового з'єднання
        return true
    }
}

Це вимагає дозволу від Apple і підходить для рішень Enterprise/MDM.

async/await (Swift 5.5+)

func fetchViaProxy() async throws -> String {
    let config = URLSessionConfiguration.default
    config.connectionProxyDictionary = [
        kCFNetworkProxiesHTTPEnable: true,
        kCFNetworkProxiesHTTPProxy: "proxy_ip",
        kCFNetworkProxiesHTTPPort: 8080
    ]

    let session = URLSession(configuration: config)
    let url = URL(string: "https://httpbin.org/ip")!
    let (data, _) = try await session.data(from: url)
    return String(data: data, encoding: .utf8) ?? ""
}

// Використання
Task {
    let ip = try await fetchViaProxy()
    print(ip)
}

Висновок

Swift надає гнучкі інструменти для роботи з проксі: URLSession для високорівневих завдань, фреймворк Network для низькорівневого контролю та Network Extension для створення проксі-додатків. Для більшості завдань URLSession з connectionProxyDictionary є оптимальним вибором.

Оновлено: 06.03.2026
Назад до категорії

Читайте також

Гайды 1 хв

Налаштування проксі в Cypress для E2E тестування

Налаштування проксі в Cypress: змінні HTTP_PROXY, cy-proxy-middleware та тестування геозалежного контенту.

Гайды 1 хв

Як автоматизувати купівлю проксі через API

Автоматизація купівлі та управління проксі через API провайдерів: інтеграція, моніторинг використання та автопоновлення.

Гайды 1 хв

Створення інформаційної панелі моніторингу проксі в Grafana

Покрокове створення інформаційної панелі для моніторингу проксі в Grafana: метрики,

Гайды 1 хв

Як тестувати проксі перед покупкою

Чек-лист тестування проксі перед покупкою: швидкість, стабільність, анонімність, гео та сумісність з ціллю

Гайды 1 хв

Як налаштувати липкі сесії через проксі

Липкі сесії: підтримка однієї IP-адреси протягом усієї сесії, налаштовуються через провайдера та самостійно.

Гайды 1 хв

Використання проксі з Camoufox

Camoufox — це модифікований Firefox для обходу антиботів. Налаштування проксі, відбиток та режим невидимості.

Спробуйте наші проксі

20,000+ проксі в 100+ країнах світу

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.