Swift URLSession proxy: Cấu hình proxy cho ứng dụng iOS và macOS
Swift URLSession proxy là cách cấu hình để các yêu cầu mạng của ứng dụng iOS, iPadOS, macOS viết bằng Swift đi qua máy chủ proxy thay vì đi thẳng. URLSession mặc định theo proxy của hệ thống, nhưng lập trình viên có thể chỉ định proxy riêng cho từng phiên bằng connectionProxyDictionary, xử lý proxy có tài khoản qua delegate, và từ iOS 17, macOS 14 dùng ProxyConfiguration của Network framework để khai báo proxy HTTP CONNECT hoặc SOCKS5 rõ ràng hơn. Bài này ProxyVN hướng dẫn từng cách, kèm ví dụ mã, cách tắt proxy, cách gỡ lỗi bằng mitmproxy, và các lưu ý về bảo mật khi đưa proxy vào ứng dụng. Xem thêm dịch vụ tại ProxyVN.
Tổng quan về URLSession và proxy
URLSession là API mạng chuẩn của nền tảng Apple, dùng để gửi yêu cầu HTTP, tải tệp, mở WebSocket. Mỗi URLSession được tạo từ một URLSessionConfiguration, và cấu hình proxy nằm trong đối tượng cấu hình này. Tài liệu gốc có trong tài liệu URLSession của Apple.
Ba cách URLSession chọn proxy

URLSession chọn proxy thế nào
- Theo hệ thống: mặc định. Trên iOS, đó là proxy đặt trong cài đặt Wi-Fi hoặc hồ sơ cấu hình do doanh nghiệp cài. Trên macOS, đó là proxy trong System Settings, Network.
- Theo từ điển proxy riêng: gán connectionProxyDictionary cho cấu hình, áp dụng cho mọi yêu cầu của phiên đó.
- Theo ProxyConfiguration: từ iOS 17, macOS 14, gán proxyConfigurations cho cấu hình, khai báo proxy bằng kiểu dữ liệu rõ ràng.
Khi nào ứng dụng cần proxy riêng
- Ứng dụng nội bộ doanh nghiệp phải đi qua proxy của công ty.
- Công cụ kiểm thử, giám sát cần gửi yêu cầu từ nhiều IP, nhiều vùng.
- Ứng dụng macOS thu thập dữ liệu công khai, cần chia tải qua nhiều proxy.
- Ứng dụng cho người dùng tự nhập proxy, ví dụ trình duyệt, ứng dụng nhắn tin.
Phần lớn ứng dụng thông thường không cần proxy riêng, chỉ cần tôn trọng proxy hệ thống, việc URLSession tự làm.
Proxy hệ thống trên iOS và macOS
URLSession tự theo proxy hệ thống
Khi người dùng đặt proxy cho Wi-Fi trên iPhone, các ứng dụng dùng URLSession với cấu hình mặc định sẽ đi qua proxy đó. Người dùng cài proxy Wi-Fi theo bài cách cài proxy trên iPhone, trên Mac theo bài cách cài proxy trên macOS.
Đọc proxy hệ thống trong mã
Có thể đọc cấu hình proxy hiện tại bằng CFNetworkCopySystemProxySettings, ví dụ để hiển thị cho người dùng biết ứng dụng đang đi qua proxy:
import CFNetwork
if let settings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as? [String: Any] {
print(settings["HTTPProxy"] ?? "khong co proxy HTTP")
}
Proxy hệ thống không phải lúc nào cũng áp dụng
Kết nối dùng socket trực tiếp, thư viện mạng tự viết, hoặc kết nối không phải HTTP không tự đi qua proxy Wi-Fi. URLSession với HTTP, HTTPS thì có.
Khai báo proxy bằng connectionProxyDictionary

Khai báo từ điển proxy
Proxy HTTP và HTTPS
import Foundation
let config = URLSessionConfiguration.default
config.connectionProxyDictionary = [
"HTTPEnable": true,
"HTTPProxy": "203.0.113.10",
"HTTPPort": 8080,
"HTTPSEnable": true,
"HTTPSProxy": "203.0.113.10",
"HTTPSPort": 8080
]
let session = URLSession(configuration: config)
Các khoá HTTPEnable, HTTPProxy, HTTPPort áp dụng cho địa chỉ http://. Các khoá HTTPSEnable, HTTPSProxy, HTTPSPort áp dụng cho địa chỉ https://. Trên macOS có hằng số kCFNetworkProxiesHTTPSEnable và các hằng tương ứng, trên iOS một số hằng không được công bố nên dùng chuỗi trực tiếp như ví dụ. Giá trị cổng là số, không phải chuỗi. Mô tả thuộc tính có trong tài liệu connectionProxyDictionary.
Proxy SOCKS
config.connectionProxyDictionary = [
"SOCKSEnable": true,
"SOCKSProxy": "203.0.113.10",
"SOCKSPort": 1080
]
Hỗ trợ SOCKS qua từ điển này ổn định trên macOS. Trên iOS, hành vi có thể khác theo phiên bản hệ điều hành, nên kiểm thử kỹ trên thiết bị thật. Từ iOS 17, dùng ProxyConfiguration cho SOCKS5 là cách rõ ràng hơn. Khác biệt giữa HTTP và SOCKS5 có trong bài proxy HTTP và SOCKS5.
Phạm vi áp dụng
Từ điển proxy gắn với cấu hình của phiên. Mọi yêu cầu qua URLSession đó đi qua proxy, các phiên khác không bị ảnh hưởng. Muốn dùng nhiều proxy, tạo nhiều phiên.
Kiểm tra IP
let url = URL(string: "https://api.ipify.org")!
let (data, _) = try await session.data(from: url)
print(String(decoding: data, as: UTF8.self))
Kết quả là IP của proxy thì cấu hình đã có tác dụng.
Proxy có xác thực trong URLSession
Proxy mua từ nhà cung cấp thường cần tài khoản và mật khẩu. Từ điển proxy có khoá cho tài khoản, nhưng cách ổn định hơn là xử lý thử thách xác thực qua delegate.

Xác thực proxy qua delegate
Xử lý thử thách xác thực proxy
Khi proxy trả về mã 407, URLSession gọi delegate với một thử thách xác thực có protectionSpace là proxy:
final class ProxyAuthDelegate: NSObject, URLSessionTaskDelegate {
let user: String
let pass: String
init(user: String, pass: String) { self.user = user; self.pass = pass }
func urlSession(_ session: URLSession, task: URLSessionTask,
didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
if challenge.protectionSpace.isProxy() && challenge.previousFailureCount == 0 {
completionHandler(.useCredential, URLCredential(user: user, password: pass, persistence: .forSession))
} else {
completionHandler(.performDefaultHandling, nil)
}
}
}
let session = URLSession(configuration: config,
delegate: ProxyAuthDelegate(user: "user123", pass: "pass456"),
delegateQueue: nil)
Các hàm delegate được mô tả trong tài liệu URLSessionTaskDelegate. Kiểm tra previousFailureCount để tránh vòng lặp gửi đi gửi lại mật khẩu sai. Ý nghĩa mã 407 có trong bài sửa lỗi 407 Proxy Authentication Required.
Xác thực theo IP
Với ứng dụng macOS chạy trên máy có IP cố định, khai báo IP đó với nhà cung cấp để khỏi cần tài khoản. Với ứng dụng iOS trên điện thoại di chuyển nhiều mạng, xác thực theo IP không phù hợp.
Lưu thông tin đăng nhập an toàn
Không viết tài khoản proxy thẳng vào mã nguồn, vì tệp ứng dụng có thể bị giải nén và đọc chuỗi. Lưu trong Keychain nếu người dùng tự nhập, hoặc lấy từ máy chủ của mình sau khi người dùng đăng nhập nếu proxy do ứng dụng cấp.
ProxyConfiguration từ iOS 17 và macOS 14
Apple bổ sung kiểu ProxyConfiguration trong Network framework, và URLSessionConfiguration có thêm thuộc tính proxyConfigurations. Cách này khai báo proxy bằng kiểu dữ liệu rõ ràng thay vì từ điển chuỗi. Chi tiết có trong tài liệu ProxyConfiguration.
Proxy HTTP CONNECT
import Network
let endpoint = NWEndpoint.hostPort(host: "203.0.113.10", port: 8080)
var proxy = ProxyConfiguration(httpCONNECTProxy: endpoint)
proxy.applyCredential(username: "user123", password: "pass456")
let config = URLSessionConfiguration.default
config.proxyConfigurations = [proxy]
let session = URLSession(configuration: config)
Proxy SOCKS5
let socks = NWEndpoint.hostPort(host: "203.0.113.10", port: 1080)
var proxy = ProxyConfiguration(socksv5Proxy: socks)
proxy.applyCredential(username: "user123", password: "pass456")
config.proxyConfigurations = [proxy]
Ưu điểm
- Kiểu dữ liệu rõ ràng, trình biên dịch kiểm tra, ít lỗi gõ sai khoá.
- Hỗ trợ tài khoản cho cả SOCKS5, điều mà từ điển proxy cũ xử lý không đồng đều.
- Có tuỳ chọn loại trừ tên miền, cho phép đi thẳng khi proxy lỗi.
- Dùng chung được với kết nối Network framework cấp thấp.
Giữ tương thích bản cũ
Nếu ứng dụng hỗ trợ iOS dưới 17, kiểm tra phiên bản:
if #available(iOS 17.0, macOS 14.0, *) {
config.proxyConfigurations = [proxy]
} else {
config.connectionProxyDictionary = cauHinhCu
}
Tắt proxy cho một phiên
Có trường hợp ứng dụng cần đi thẳng dù hệ thống có proxy, ví dụ gọi dịch vụ nội bộ trong mạng LAN, hoặc tránh proxy gỡ lỗi khi đo hiệu năng.
let config = URLSessionConfiguration.default
config.connectionProxyDictionary = [:]
Từ điển rỗng cho URLSession biết không dùng proxy nào, kể cả proxy hệ thống. Cẩn thận khi làm vậy với ứng dụng doanh nghiệp: tổ chức đặt proxy hệ thống có chủ đích, bỏ qua proxy có thể vi phạm chính sách và kết nối sẽ bị tường lửa chặn.
Nhiều proxy và xoay proxy trong ứng dụng
Mỗi proxy một phiên
func taoPhien(host: String, port: Int) -> URLSession {
let c = URLSessionConfiguration.ephemeral
c.connectionProxyDictionary = [
"HTTPEnable": true, "HTTPProxy": host, "HTTPPort": port,
"HTTPSEnable": true, "HTTPSProxy": host, "HTTPSPort": port
]
return URLSession(configuration: c)
}
let cacPhien = danhSachProxy.map { taoPhien(host: $0.host, port: $0.port) }
Dùng cấu hình ephemeral để mỗi phiên không ghi cookie, bộ nhớ đệm xuống đĩa, tránh lẫn dữ liệu giữa các proxy.
Giữ kết nối và đổi IP
URLSession giữ kết nối mở để dùng lại. Với proxy xoay của nhà cung cấp, nhiều yêu cầu liên tiếp có thể dùng cùng một kết nối và cùng một IP. Nếu cần đổi IP mỗi yêu cầu, tạo phiên mới hoặc gọi invalidateAndCancel cho phiên cũ trước khi tạo phiên mới.
Giới hạn đồng thời
httpMaximumConnectionsPerHost trên cấu hình giới hạn số kết nối song song tới một máy chủ. Đặt giá trị hợp lý để không làm quá tải proxy và trang đích.
Gỡ lỗi mạng với mitmproxy, Charles, Proxyman
Proxy không chỉ để đổi IP. Lập trình viên iOS dùng proxy gỡ lỗi để xem yêu cầu và phản hồi của ứng dụng.

Gỡ lỗi mạng với proxy trung gian
Cách làm chung
- Chạy công cụ gỡ lỗi trên Mac, ví dụ mitmproxy, Charles, Proxyman, lắng nghe ở cổng 8080 hoặc 8888.
- Trên iPhone, đặt proxy Wi-Fi trỏ tới IP của Mac và cổng đó.
- Cài và tin cậy chứng chỉ gốc của công cụ trên iPhone (Settings, General, About, Certificate Trust Settings).
- Mở ứng dụng, các yêu cầu hiện trong công cụ gỡ lỗi.
Hướng dẫn mitmproxy có trong bài mitmproxy.
Trình giả lập
Trình giả lập iOS dùng mạng của Mac, nên theo proxy của macOS. Đặt proxy hệ thống của Mac trỏ tới công cụ gỡ lỗi, hoặc dùng tính năng tự cấu hình của công cụ. Cài chứng chỉ gốc cho trình giả lập bằng cách kéo tệp chứng chỉ vào cửa sổ trình giả lập.
Ghim chứng chỉ
Ứng dụng có ghim chứng chỉ (certificate pinning) sẽ từ chối kết nối qua công cụ gỡ lỗi vì chứng chỉ khác. Đây là hành vi đúng. Trong bản gỡ lỗi, có thể tắt ghim chứng chỉ bằng cờ biên dịch, bản phát hành giữ nguyên.
Kiểm thử tự động qua proxy
Kiểm thử giao diện trên thiết bị thật hoặc trình giả lập có thể đi qua proxy để ghi lại lưu lượng, hoặc giả lập phản hồi lỗi. Với kiểm thử trên nhiều thiết bị bằng Appium, cấu hình proxy được trình bày trong bài Appium proxy.
App Transport Security và proxy
ATS là cơ chế của Apple bắt buộc kết nối dùng HTTPS với cấu hình TLS đủ mạnh.
Kết nối tới proxy
Proxy HTTP thông thường nhận kết nối không mã hoá ở chặng từ ứng dụng tới proxy, nhưng với địa chỉ đích https://, dữ liệu được mã hoá đầu cuối qua đường hầm CONNECT. ATS kiểm tra kết nối tới đích, không phải tới proxy, nên dùng proxy HTTP với trang HTTPS không vi phạm ATS.
Không nới lỏng ATS chỉ vì proxy
Nếu gặp lỗi TLS khi đi qua proxy, nguyên nhân thường là proxy giải mã HTTPS (proxy công ty, công cụ gỡ lỗi) mà thiết bị chưa tin chứng chỉ gốc. Cách đúng là cài chứng chỉ gốc trên thiết bị, không thêm NSAllowsArbitraryLoads vào Info.plist.
Proxy cho ứng dụng doanh nghiệp qua quản lý thiết bị
Trong doanh nghiệp, iPhone, iPad, Mac thường được quản lý bằng hệ thống quản lý thiết bị (MDM). Proxy được đặt tập trung, ứng dụng không cần tự cấu hình.
Proxy toàn cục và proxy theo Wi-Fi
Hồ sơ cấu hình có thể đặt proxy cho từng mạng Wi-Fi của công ty, hoặc proxy HTTP toàn cục cho thiết bị được giám sát (supervised), áp dụng cho mọi mạng kể cả mạng di động. URLSession với cấu hình mặc định sẽ theo các proxy này. Đây là lý do ứng dụng nội bộ nên để URLSession theo hệ thống thay vì tự đặt proxy.
VPN theo ứng dụng
Một số tổ chức dùng VPN theo ứng dụng (per-app VPN) thay vì proxy. Lưu lượng của ứng dụng được chỉ định đi qua VPN của công ty, các ứng dụng khác đi thẳng. Với lập trình viên, không cần thay đổi mã, chỉ cần ứng dụng dùng API mạng chuẩn.
Phối hợp với bộ phận IT
Khi ứng dụng nội bộ gặp lỗi mạng trên thiết bị công ty mà chạy tốt trên máy cá nhân, hỏi bộ phận IT về hồ sơ proxy, PAC, chứng chỉ gốc đang được đẩy xuống thiết bị. Phần lớn lỗi nằm ở tệp PAC chưa có tên miền của dịch vụ mới, hoặc proxy giải mã HTTPS mà ứng dụng ghim chứng chỉ.
Tải nền, WebSocket và các loại kết nối khác
Phiên tải nền
URLSessionConfiguration.background dùng để tải tệp lớn khi ứng dụng không chạy. Việc tải do hệ điều hành thực hiện thay ứng dụng, theo proxy hệ thống. Hỗ trợ từ điển proxy riêng với phiên tải nền có giới hạn và có thể khác theo phiên bản, nên kiểm thử kỹ nếu cần tải nền qua proxy riêng.
WebSocket
URLSessionWebSocketTask đi qua proxy như yêu cầu HTTPS, vì WebSocket bắt đầu bằng yêu cầu HTTP rồi nâng cấp kết nối. Proxy phải cho phép kết nối giữ lâu, một số proxy cắt kết nối nhàn rỗi sau vài phút. Gửi gói ping định kỳ để giữ kết nối.
Kết nối không phải HTTP
Kết nối TCP, UDP trực tiếp qua Network framework không tự đi qua proxy HTTP của hệ thống. Từ iOS 17, có thể gắn ProxyConfiguration vào ngữ cảnh riêng tư của kết nối Network framework để đi qua proxy SOCKS5 hoặc HTTP CONNECT.
Ví dụ: công cụ macOS kiểm tra hiển thị theo vùng
Một tình huống thực tế: đội marketing cần kiểm tra trang đích, giá, banner hiển thị ra sao với người dùng ở các tỉnh khác nhau. Một công cụ macOS nhỏ viết bằng Swift làm việc này gọn gàng.
Cách tổ chức
- Danh sách proxy, mỗi proxy gắn nhãn tỉnh, nhà mạng.
- Mỗi proxy một URLSession dạng ephemeral, không lưu cookie.
- Gửi yêu cầu tới trang cần kiểm tra qua từng phiên, lưu HTML và ảnh chụp nếu cần.
- So sánh kết quả giữa các vùng, đánh dấu khác biệt.
Lưu ý
Trang có thể trả nội dung theo ngôn ngữ trong tiêu đề Accept-Language, không chỉ theo IP. Đặt tiêu đề này giống người dùng thật ở vùng đó. Một số trang dùng JavaScript để quyết định nội dung theo vị trí, khi đó cần WKWebView với proxy thay vì chỉ tải HTML. Khái niệm nhắm mục tiêu theo vị trí giải thích trong bài geo-targeting proxy là gì.
Tốc độ và lịch chạy
Không cần gửi dồn dập. Chạy định kỳ vài lần mỗi ngày là đủ cho mục đích kiểm tra hiển thị. Ghi lại thời gian phản hồi của từng proxy để phát hiện proxy chậm hoặc chết.
Ghi nhật ký và giám sát lỗi mạng qua proxy
Ghi lại proxy đã dùng
Khi ứng dụng dùng nhiều proxy, ghi kèm nhãn proxy trong nhật ký mỗi yêu cầu lỗi. Không ghi tài khoản, mật khẩu. Nhờ vậy khi người dùng báo lỗi, biết ngay lỗi rơi vào proxy nào.
Đo thời gian bằng URLSessionTaskMetrics
Delegate nhận URLSessionTaskMetrics sau mỗi yêu cầu, có thời gian phân giải tên miền, kết nối, bắt tay TLS, chờ phản hồi. Với proxy, thời gian kết nối và bắt tay TLS phản ánh chất lượng proxy. Theo dõi các chỉ số này theo thời gian để phát hiện proxy xuống cấp.
Thử lại hợp lý
Lỗi không kết nối được tới proxy nên thử lại với proxy khác. Lỗi do máy chủ đích trả về như 429, 503 nên chờ lâu hơn trước khi thử lại. Không thử lại vô hạn, đặt giới hạn số lần.
Cho người dùng tự nhập proxy trong ứng dụng
Ứng dụng như trình duyệt, ứng dụng nhắn tin, công cụ tải tệp thường có màn hình cho người dùng tự nhập proxy. Thiết kế màn hình này cẩn thận giúp giảm phần lớn câu hỏi hỗ trợ.
Các trường cần có
- Loại proxy: HTTP hoặc SOCKS5.
- Địa chỉ và cổng, hai ô riêng, kiểm tra định dạng ngay khi nhập.
- Tài khoản, mật khẩu, có thể để trống.
- Danh sách tên miền đi thẳng, cho người dùng nâng cao.
- Nút kiểm tra kết nối, hiển thị IP nhận được và thời gian phản hồi.
Cho phép dán một dòng
Người dùng thường nhận proxy dưới dạng ip:port:user:pass từ nhà cung cấp. Cho phép dán nguyên dòng, ứng dụng tự tách thành các trường, tiết kiệm thời gian và tránh nhập sai. Các định dạng phổ biến được tổng hợp trong bài định dạng proxy.
Lưu và áp dụng
Lưu địa chỉ, cổng trong UserDefaults, lưu mật khẩu trong Keychain. Khi người dùng lưu cấu hình mới, tạo lại URLSession với cấu hình mới, huỷ phiên cũ. Hiển thị trạng thái đang dùng proxy ở chỗ dễ thấy để người dùng không quên.
Thông báo lỗi dễ hiểu
Thay vì hiện mã lỗi kỹ thuật, dịch sang câu dễ hiểu: không kết nối được tới proxy, sai tài khoản proxy, proxy chặn trang này. Kèm gợi ý cách xử lý, ví dụ kiểm tra lại cổng hoặc thử tắt proxy.
Đưa proxy vào quy trình kiểm thử
Kiểm thử với mạng chậm
Ngoài công cụ Network Link Conditioner của Apple, có thể dùng proxy ở xa để mô phỏng độ trễ thật. Ứng dụng nên hiển thị trạng thái tải hợp lý, có thời gian chờ, cho người dùng thử lại.
Kiểm thử khi proxy lỗi
Cấu hình một proxy không tồn tại, xem ứng dụng phản ứng thế nào: có treo không, có báo lỗi rõ không, có tự chuyển về kết nối trực tiếp không nếu thiết kế cho phép. Đây là tình huống thực tế khi người dùng ở mạng công ty có proxy hay chập chờn.
Kiểm thử trên mạng doanh nghiệp
Nếu ứng dụng dành cho doanh nghiệp, kiểm thử trên một thiết bị có hồ sơ proxy và chứng chỉ gốc giống môi trường của khách hàng. Nhiều lỗi chỉ xuất hiện khi proxy giải mã HTTPS hoặc dùng tệp PAC.
Lỗi thường gặp khi dùng proxy với URLSession
Hiện tượng |
Nguyên nhân hay gặp |
Cách xử lý |
|---|---|---|
Yêu cầu vẫn đi thẳng |
Gõ sai khoá từ điển, cổng là chuỗi |
Kiểm tra khoá, dùng kiểu số cho cổng |
NSURLErrorCannotConnectToHost |
Proxy tắt, sai địa chỉ, cổng |
Kiểm tra proxy bằng curl |
Lỗi 407 lặp lại |
Sai tài khoản, delegate gửi lại mật khẩu sai |
Kiểm tra previousFailureCount |
NSURLErrorSecureConnectionFailed |
Proxy giải mã HTTPS, chưa tin chứng chỉ |
Cài chứng chỉ gốc |
SOCKS không chạy trên iOS |
Hỗ trợ khác nhau theo phiên bản |
Dùng ProxyConfiguration iOS 17 |
IP không đổi với proxy xoay |
Kết nối được tái sử dụng |
Tạo phiên mới |
Proxy hệ thống bị bỏ qua |
Đã gán từ điển proxy rỗng |
Xoá dòng gán hoặc để nil |
Khi cần kiểm tra proxy độc lập với ứng dụng, dùng curl theo bài curl proxy là gì.
So sánh với proxy trong Flutter và các nền tảng khác
Nền tảng |
Cách khai báo proxy |
Theo proxy hệ thống mặc định |
|---|---|---|
Swift URLSession |
connectionProxyDictionary, proxyConfigurations |
Có |
Flutter (dart:io) |
HttpClient.findProxy |
Không |
Android OkHttp |
Proxy trên OkHttpClient |
Có, qua ProxySelector |
React Native |
Theo thư viện mạng gốc |
Có trên iOS |
Flutter là trường hợp hay gây nhầm: ứng dụng Flutter không tự theo proxy Wi-Fi, cần cấu hình riêng. Chi tiết có trong bài Flutter proxy.
Bảo mật khi đưa proxy vào ứng dụng
Không giấu proxy với người dùng
Ứng dụng gửi dữ liệu người dùng qua proxy của bên thứ ba cần nêu rõ trong chính sách quyền riêng tư. Apple xét duyệt ứng dụng có thể hỏi về luồng dữ liệu này.
Chỉ dùng proxy tin cậy
Proxy HTTP thấy tên miền đích và mọi dữ liệu không mã hoá. Với trang HTTPS, proxy chỉ thấy tên miền. Dù vậy, không dùng proxy miễn phí, không rõ nguồn gốc trong ứng dụng.
Bảo vệ tài khoản proxy
Tài khoản proxy nhúng trong ứng dụng có thể bị trích xuất. Nếu ứng dụng cần proxy chung, cấp tài khoản tạm thời từ máy chủ của mình, có thời hạn, giới hạn băng thông, để tài khoản bị lộ không gây thiệt hại lớn.
Chọn proxy cho ứng dụng iOS, macOS
Theo mục đích
- Ứng dụng doanh nghiệp: proxy của công ty, cấu hình qua hồ sơ quản lý thiết bị.
- Công cụ kiểm thử hiển thị theo vùng: proxy đúng quốc gia, đúng tỉnh.
- Ứng dụng macOS thu thập dữ liệu: bể proxy tĩnh hoặc proxy xoay.
Giao thức
HTTP CONNECT tương thích tốt nhất với URLSession trên mọi phiên bản. SOCKS5 dùng tốt từ iOS 17 với ProxyConfiguration. Anh em cần proxy HTTP, SOCKS5 IP Việt Nam ổn định theo nhà mạng Viettel, VNPT, FPT cho ứng dụng có thể mua proxy tại ProxyVN.
Câu hỏi thường gặp về Swift URLSession proxy
URLSession có tự theo proxy Wi-Fi không
Có, với cấu hình mặc định. Chỉ khi gán connectionProxyDictionary hoặc proxyConfigurations thì cấu hình riêng mới ghi đè.
Có đặt proxy cho từng yêu cầu được không
Không trực tiếp. Proxy gắn với cấu hình của phiên. Dùng nhiều phiên cho nhiều proxy.
Alamofire có dùng proxy theo cách này không
Alamofire xây trên URLSession, nên cấu hình proxy qua URLSessionConfiguration truyền vào Session của Alamofire.
WebView có theo proxy của URLSession không
WKWebView không dùng URLSession của ứng dụng. Từ iOS 17, WKWebsiteDataStore có thuộc tính proxyConfigurations để đặt proxy cho WebView.
Proxy có làm ứng dụng chậm hơn không
Có thêm độ trễ của một chặng. Proxy gần người dùng, ổn định thì chênh lệch nhỏ. Proxy ở xa hoặc quá tải làm ứng dụng chậm rõ.
Tổng kết
Swift URLSession proxy có ba cách: theo proxy hệ thống mặc định, khai báo connectionProxyDictionary cho từng phiên với các khoá HTTP, HTTPS, SOCKS, và từ iOS 17, macOS 14 dùng ProxyConfiguration với proxyConfigurations cho HTTP CONNECT và SOCKS5 có tài khoản. Proxy có xác thực xử lý qua delegate, kiểm tra protectionSpace.isProxy và số lần thất bại. Dùng từ điển rỗng để tắt proxy, tạo nhiều phiên để dùng nhiều proxy, và dùng mitmproxy để gỡ lỗi. Cần proxy Việt Nam ổn định cho ứng dụng iOS, macOS, anh em liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam để được tư vấn.