Proxyman là gì? Debug HTTPS trên macOS, iOS và Android
Proxyman là công cụ debug HTTP và HTTPS có giao diện native trên macOS, kèm bản Windows và Linux, giúp lập trình viên xem mọi request mà ứng dụng gửi đi. Công cụ bắt được lưu lượng từ trình duyệt, iOS Simulator, iPhone thật và điện thoại Android, giải mã HTTPS, dừng và sửa phản hồi để thử các tình huống khó tái hiện. Bài này ProxyVN hướng dẫn cài đặt, cài chứng chỉ, bắt traffic di động, các tính năng chính và cách đi ra qua proxy khác. Tham khảo dịch vụ tại ProxyVN.
Tổng quan về Proxyman
Proxyman thuộc nhóm công cụ proxy gỡ lỗi, cùng nhóm với Charles và mitmproxy. Nó được nhiều lập trình viên iOS ưa chuộng nhờ giao diện viết bằng Swift chạy rất nhẹ trên Mac.
Công cụ này làm gì
Khi phát triển ứng dụng di động hay web, anh em thường cần biết chính xác ứng dụng gửi request nào, kèm header gì, nhận về JSON ra sao. Log trong mã chỉ thấy một phần, còn Proxyman đứng giữa ứng dụng và máy chủ nên thấy toàn bộ. Theo tài liệu chính thức của Proxyman, ứng dụng macOS được viết bằng Apple Swift NIO, hỗ trợ macOS 12 trở lên và chip Apple Silicon.
Bản Windows và Linux được xây trên ElectronJS, không native như bản Mac nhưng đủ tính năng chính. Ngoài ra còn có ứng dụng Proxyman riêng trên iOS để bắt traffic ngay trên iPhone mà không cần máy tính.
Bản Windows và Linux
Bản Windows và Linux phù hợp với lập trình viên Android hay web không dùng Mac. Cách cài chứng chỉ khác một chút: trên Windows, chứng chỉ được thêm vào kho Trusted Root Certification Authorities của người dùng, trên Linux phải thêm vào kho chứng chỉ hệ thống và kho riêng của từng trình duyệt. Giao diện và các tính năng Breakpoint, Map Local, Scripting gần như giống bản Mac.
Do xây trên ElectronJS, bản này tốn RAM hơn bản Mac khi danh sách request dài. Anh em nên dùng Allow List để chỉ ghi những tên miền cần thiết, giữ công cụ chạy mượt trong phiên làm việc dài.
Nhóm tính năng chính
Tài liệu liệt kê các nhóm tính năng sau, đây cũng là những thứ anh em dùng thường xuyên nhất:
- Chặn bắt và giải mã HTTP, HTTPS.
- Compose và Repeat: soạn request mới hoặc gửi lại request cũ.
- Breakpoint: dừng request hoặc phản hồi để sửa trực tiếp.
- Map Local và Map Remote: thay phản hồi bằng tệp trên máy hoặc chuyển sang máy chủ khác.
- Allow List và Block List: chỉ bắt hoặc chặn một số tên miền.
- External Proxying: đi ra ngoài qua một proxy khác.
- Scripting: viết JavaScript sửa request và phản hồi tự động.
- Diff: so sánh hai request hoặc hai phản hồi.
- Hỗ trợ Protobuf, GraphQL và WebSocket.
Đây là công cụ cho lập trình viên gỡ lỗi ứng dụng của chính mình, không phải công cụ để soi trộm lưu lượng của người khác. Mọi thao tác đều đòi hỏi anh em có quyền cài chứng chỉ lên thiết bị.
Giá và giấy phép
Theo trang chủ Proxyman, công cụ cho dùng miễn phí khi bắt đầu, không cần thẻ thanh toán. Một số tính năng đánh dấu PRO như Split View hay Network Extension cần mua giấy phép. Có gói cho nhóm, giấy phép giáo dục và các gói kết hợp. Trang chủ cho biết công cụ có hơn 800.000 người dùng và đã phát hành hơn 200 bản công khai.
Anh em nên dùng bản miễn phí để thử trước, đủ cho phần lớn nhu cầu gỡ lỗi cá nhân. Đừng tìm khoá bản quyền lậu, ứng dụng có quyền đọc mọi lưu lượng HTTPS của máy là nơi kẻ xấu rất thích cài mã độc.
Cài đặt Proxyman và chứng chỉ trên Mac

Ứng dụng gọi API nào, gửi gì
Phần này đi qua bước cài đặt trên Mac, nền tảng phổ biến nhất của công cụ. Các bước trên Windows tương tự, chỉ khác vị trí kho chứng chỉ.
Cài ứng dụng
Anh em tải bản cài từ trang chủ hoặc cài bằng Homebrew với lệnh `brew install --cask proxyman`. Lần chạy đầu tiên, Proxyman hỏi quyền đặt proxy hệ thống cho macOS. Cho phép để công cụ tự trỏ proxy của Mac về chính nó, mặc định ở cổng 9090.
Ngay sau khi mở, cửa sổ chính đã hiện các request HTTP. Request HTTPS chỉ hiện tên miền và báo chưa giải mã, vì chưa có chứng chỉ.
Cài chứng chỉ gốc
Để giải mã HTTPS, Proxyman cần chứng chỉ gốc của nó được tin tưởng. Vào menu Certificate, chọn Install Certificate on this Mac, làm theo hướng dẫn tự động. Công cụ tạo một CA riêng cho máy của anh em, thêm vào Keychain và đặt chế độ tin tưởng.
Mỗi máy có một CA khác nhau, không dùng chung giữa các máy. Khi không dùng nữa, anh em nên gỡ chứng chỉ này khỏi Keychain để không ai lợi dụng được.
Bật SSL Proxying cho từng tên miền
Proxyman không giải mã mọi tên miền mặc định, chỉ giải mã những tên miền anh em chọn. Nhấp chuột phải vào tên miền trong danh sách bên trái, chọn Enable SSL Proxying, rồi gửi lại request. Từ lúc này, nội dung request và phản hồi hiện đầy đủ.
Cách làm theo từng tên miền giúp tránh làm hỏng các ứng dụng hệ thống dùng certificate pinning như App Store hay iCloud. Chỉ bật cho tên miền API của ứng dụng đang phát triển là đủ.
Bắt traffic iOS bằng Proxyman

Cài chứng chỉ trên điện thoại
Lập trình viên iOS là nhóm dùng Proxyman nhiều nhất. Công cụ hỗ trợ cả Simulator lẫn iPhone thật, mỗi loại có cách cài riêng.
iOS Simulator
Với Simulator, Proxyman có tính năng cài tự động. Vào menu Certificate, chọn Install Certificate on iOS, chọn Simulators, làm theo hướng dẫn. Công cụ cài chứng chỉ vào mọi Simulator đang có. Vì Simulator dùng mạng của Mac, request từ ứng dụng sẽ tự xuất hiện trong Proxyman.
iPhone và iPad thật
Theo hướng dẫn bắt traffic thiết bị iOS, các bước như sau:
- Trên Mac, vào Certificate > Install Certificate on iOS > Physical Devices để xem IP của máy và cổng, mặc định 9090.
- Trên iPhone, vào Settings > Wi-Fi, chọn mạng đang kết nối, đặt HTTP Proxy chế độ thủ công với IP của Mac và cổng 9090, không xác thực.
- Tắt mọi ứng dụng VPN trên cả Mac và iPhone.
- Mở tab ẩn danh trong Safari, truy cập `proxy.man/ssl` để tải chứng chỉ.
- Vào Settings > Profiles Downloaded, chọn Proxyman CA và cài đặt.
- Vào Settings > General > About > Certificate Trust Settings, bật Proxyman CA.
- Trên Mac, bật SSL Proxying cho tên miền cần xem, rồi gửi request mới từ ứng dụng.
Bước tin tưởng chứng chỉ hay bị bỏ qua nhất. Cài hồ sơ xong mà không bật trong Certificate Trust Settings thì HTTPS vẫn không giải mã được. Cách đặt proxy wifi trên iPhone chi tiết hơn có trong bài cài proxy trên iPhone.
Dọn dẹp sau khi gỡ lỗi
Tài liệu khuyên xoá chứng chỉ khỏi thiết bị khi không còn gỡ lỗi, để lưu lượng của máy không bị chặn bắt sau này. Anh em cũng tắt proxy trong cài đặt wifi, nếu không khi Mac tắt, iPhone sẽ mất mạng trên wifi đó. Thư viện Atlantis là phương án thay thế, cài vào ứng dụng để gửi lưu lượng sang Proxyman mà không cần đặt proxy wifi.
Bắt traffic Android bằng Proxyman
Android khó hơn iOS vì từ Android 7, ứng dụng mặc định không tin chứng chỉ do người dùng tự cài. Với ứng dụng của chính đội mình, có cách xử lý chính thống.
Đặt proxy wifi và cài chứng chỉ
Theo hướng dẫn bắt traffic thiết bị Android, anh em đặt proxy wifi trên điện thoại trỏ về IP máy tính và cổng 9090. Sau đó mở `http://proxy.man/ssl` trên trình duyệt điện thoại để tải chứng chỉ.
Từ Android 11, phải dùng Chrome tải về rồi cài thủ công trong Settings > Security > Encryption & Credentials > Install a certificate, chọn CA certificate. Kiểm tra lại trong Trusted Credentials, tab User, thấy Proxyman CA là đã cài đúng. Một số máy Samsung mất mạng sau khi đặt proxy, quên mạng wifi rồi kết nối lại thường giải quyết được.
Cấu hình network_security_config cho bản debug
Để ứng dụng tin chứng chỉ người dùng, anh em tạo tệp `res/xml/network_security_config.xml` trong dự án. Đây là cấu hình phổ biến chỉ áp dụng cho bản debug:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
<certificates src="system" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Rồi khai báo trong thẻ `application` của `AndroidManifest.xml` thuộc tính `android:networkSecurityConfig="@xml/network_security_config"`. Khối `debug-overrides` chỉ có hiệu lực ở bản debug, bản phát hành vẫn an toàn. Tài liệu nhấn mạnh phải gỡ các cấu hình cho phép tin chứng chỉ người dùng khỏi bản phát hành.
Android Emulator
Với trình giả lập, Proxyman có script tự động trong Certificate > Install Certificate on Android > Emulator. Script chuẩn không phủ mọi image, image có Google Play cần quy trình riêng. Sau khi chạy xong nhớ khởi động lại emulator.
Ứng dụng Flutter
Ứng dụng Flutter bỏ qua proxy hệ thống trên cả iOS lẫn Android. Đặt proxy wifi xong, request của Flutter vẫn đi thẳng. Anh em phải cấu hình proxy trong mã cho HTTP client của Dart ở bản debug, trỏ về IP máy tính và cổng 9090.
Các tính năng gỡ lỗi chính của Proxyman

Dừng và sửa phản hồi
Bắt được traffic mới là bước đầu. Giá trị thật của công cụ nằm ở khả năng sửa request và phản hồi để thử những tình huống khó tạo ra từ phía máy chủ.
Breakpoint
Breakpoint dừng request hoặc phản hồi khớp với quy tắc, mở cửa sổ cho anh em sửa trước khi đi tiếp. Ví dụ muốn xem ứng dụng xử lý thế nào khi API trả lỗi 500, anh em đặt breakpoint cho phản hồi của API đó, đổi mã trạng thái thành 500, rồi cho đi tiếp.
Cách này nhanh hơn rất nhiều so với nhờ đội máy chủ tạo lỗi giả. Nó đặc biệt hữu ích để kiểm tra giao diện khi danh sách trống, khi dữ liệu quá dài, hay khi token hết hạn.
Map Local và Map Remote
Map Local thay phản hồi của một API bằng nội dung tệp trên máy. Khi máy chủ chưa làm xong API mới, đội ứng dụng vẫn phát triển được bằng tệp JSON giả. Map Remote chuyển request từ máy chủ này sang máy chủ khác, ví dụ cho ứng dụng bản phát hành gọi vào máy chủ thử nghiệm mà không phải build lại.
Scripting
Với các thay đổi lặp lại hoặc có logic, anh em viết JavaScript trong mục Scripting. Mỗi script có hàm xử lý request và hàm xử lý phản hồi. Ví dụ minh hoạ dưới đây thêm một header vào request và đánh dấu phản hồi:
async function onRequest(context, url, request) {
request.headers["X-Debug-Device"] = "iphone-test-01";
return request;
}
async function onResponse(context, url, request, response) {
response.headers["X-Debug-Mapped"] = "true";
return response;
}
Script áp dụng cho các URL khớp với quy tắc anh em đặt. Đây là cách gọn để thêm token thử nghiệm, đổi môi trường hay giả lập dữ liệu theo điều kiện.
Compose, Repeat và Diff
Compose cho phép soạn request mới, kể cả nhập từ lệnh cURL. Repeat gửi lại một request đã bắt, hữu ích khi kiểm tra máy chủ sau khi sửa lỗi. Diff so sánh hai request hoặc hai phản hồi cạnh nhau, giúp tìm ra vì sao một lần gọi thành công còn lần khác thất bại.
Dùng Proxyman cho web và backend
Proxyman không chỉ dành cho ứng dụng di động. Trang chủ cho biết công cụ còn hỗ trợ lập trình backend với Node.js, Ruby, Python và Go, cùng chế độ tự thiết lập cho cửa sổ Terminal.
Trình duyệt trên Mac
Vì Proxyman đặt proxy hệ thống của macOS, Safari và Chrome tự đi qua công cụ mà không phải cấu hình gì. Firefox dùng cài đặt proxy riêng nên cần chọn Use system proxy settings trong phần Network Settings. Với trang web, Proxyman bổ sung cho tab Network của DevTools ở chỗ nó giữ lịch sử qua nhiều tab, nhiều lần tải lại, và cho phép sửa phản hồi bằng Breakpoint.
Lệnh dòng lệnh và mã backend
Các công cụ dòng lệnh như curl, Python requests hay Node.js không đọc proxy hệ thống của macOS. Proxyman có chế độ tự thiết lập Terminal, mở một cửa sổ đã đặt sẵn biến môi trường proxy và tin tưởng chứng chỉ. Anh em cũng có thể tự đặt biến:
export HTTP_PROXY=http://127.0.0.1:9090
export HTTPS_PROXY=http://127.0.0.1:9090
curl -v https://api.github.com/zen
Với Python, thư viện requests đọc các biến này nhưng sẽ báo lỗi chứng chỉ, cần trỏ biến `REQUESTS_CA_BUNDLE` tới tệp chứng chỉ của Proxyman. Với Node.js, hàm fetch gốc không đọc biến proxy, phải gắn agent riêng hoặc dùng cờ hỗ trợ proxy của bản Node mới.
Gỡ lỗi webhook và API bên thứ ba
Khi tích hợp cổng thanh toán, dịch vụ gửi tin nhắn hay API bản đồ, máy chủ của anh em gọi ra ngoài và nhận phản hồi. Đưa các lời gọi đó qua Proxyman trong môi trường phát triển giúp thấy chính xác dữ liệu gửi đi, header xác thực và phản hồi lỗi. Nhiều lỗi tích hợp được phát hiện chỉ sau vài phút nhìn request thật thay vì đọc tài liệu cả buổi.
Proxyman với GraphQL, WebSocket và Protobuf
Ứng dụng hiện đại không chỉ dùng REST trả JSON. Proxyman hỗ trợ thêm ba định dạng hay gặp, giúp đọc dữ liệu dễ hơn nhiều so với nhìn chuỗi thô.
GraphQL
Mọi request GraphQL thường gửi tới cùng một đường dẫn `/graphql`, khiến danh sách request trông giống hệt nhau. Proxyman tách theo tên truy vấn, hiển thị phần query và biến riêng, giúp tìm đúng truy vấn cần xem. Breakpoint và Map Local cũng áp dụng được theo tên truy vấn thay vì chỉ theo URL.
WebSocket
Ứng dụng chat, bảng giá trực tiếp hay trò chơi trực tuyến dùng WebSocket để giữ kết nối lâu dài. Proxyman hiển thị từng tin nhắn gửi đi và nhận về theo thời gian thực, có dấu thời gian và hướng. Đây là công cụ rất hữu ích khi ứng dụng mất đồng bộ dữ liệu mà không rõ tin nhắn nào bị thiếu.
Protobuf
Một số ứng dụng dùng Protocol Buffers để tiết kiệm dung lượng, dữ liệu là chuỗi nhị phân không đọc được bằng mắt. Khi nạp tệp định nghĩa `.proto` vào Proxyman, công cụ giải mã thành dạng có cấu trúc dễ đọc. Không có tệp định nghĩa, anh em vẫn xem được dạng giải mã thô theo số thứ tự trường.
Mẹo làm việc hiệu quả với Proxyman
Sau vài ngày dùng, danh sách request sẽ dài hàng nghìn dòng. Vài thói quen nhỏ giúp tìm đúng thứ cần tìm nhanh hơn.
Lọc và ghim
Thanh lọc hỗ trợ ký tự đại diện, biểu thức chính quy và tìm toàn văn. Anh em nên lưu các bộ lọc hay dùng như "chỉ API của ứng dụng" để bật bằng một cú bấm. Ghim tên miền đang làm việc lên đầu danh sách bên trái giúp không lạc giữa hàng trăm tên miền quảng cáo và thống kê.
Allow List để giảm nhiễu
Thay vì bắt mọi thứ rồi lọc, Allow List chỉ ghi lại các tên miền được liệt kê. Máy chạy nhẹ hơn, danh sách gọn hơn, và anh em cũng giảm nguy cơ vô tình ghi lại dữ liệu cá nhân từ các ứng dụng khác trên máy.
Chia sẻ phiên với đồng đội
Khi báo lỗi, anh em có thể xuất một phiên làm việc hoặc xuất request dạng cURL gửi cho đội backend. Trước khi gửi, kiểm tra và xoá token, cookie, mật khẩu trong request. Phiên gỡ lỗi thường chứa thông tin đăng nhập thật, gửi nhầm vào nhóm chat là lộ tài khoản.
Proxyman đi ra qua External Proxy

Đi ra qua proxy bên ngoài
Đôi khi chính máy đang chạy Proxyman cũng cần đi ra ngoài qua một proxy khác. Tính năng External Proxy xử lý việc này mà không làm mất khả năng bắt traffic.
Khi nào cần
Ba tình huống hay gặp:
- Máy làm việc trong mạng công ty, mọi kết nối ra Internet phải qua proxy công ty.
- Cần kiểm tra ứng dụng hiển thị đúng nội dung theo quốc gia, ví dụ giá, ngôn ngữ, quảng cáo theo vùng.
- Máy chủ thử nghiệm chỉ cho phép một số IP truy cập, và IP được phép là IP của một proxy cố định.
Cách cấu hình
Trong Proxyman, mở phần cài đặt External Proxy trong menu Tools. Anh em bật External Proxy, nhập địa chỉ và cổng cho HTTP, HTTPS, hoặc SOCKS, kèm tên đăng nhập và mật khẩu nếu proxy yêu cầu. Có thể đặt danh sách bỏ qua cho các tên miền nội bộ đi thẳng.
Luồng dữ liệu khi đó là ứng dụng gửi tới Proxyman, Proxyman ghi lại rồi chuyển tiếp qua proxy bên ngoài. Anh em vẫn thấy đầy đủ request trong khi IP mà máy chủ nhìn thấy là IP của proxy bên ngoài.
Khi cần IP Việt Nam ổn định để kiểm tra ứng dụng theo vùng, anh em có thể mua proxy tại ProxyVN, gồm dân cư tĩnh Viettel, VNPT, FPT và datacenter, hỗ trợ HTTP và SOCKS5, cấp sẵn tên đăng nhập và mật khẩu nhập thẳng vào External Proxy.
Gọi API từ mã Swift qua proxy
Với một số bài kiểm thử tự động, anh em muốn ứng dụng tự đi qua proxy mà không cần cài đặt wifi. URLSession của Swift cho phép khai báo proxy trong cấu hình phiên. Cách làm chi tiết có trong bài Swift URLSession proxy.
So sánh Proxyman với Charles, mitmproxy và Burp Suite
Mỗi công cụ proxy gỡ lỗi có thế mạnh riêng. Chọn đúng giúp tiết kiệm thời gian học và chi phí giấy phép.
Bảng so sánh nhanh
Bảng dưới so sánh bốn công cụ phổ biến:
Tiêu chí |
Proxyman |
Charles |
mitmproxy |
Burp Suite |
|---|---|---|---|---|
Giao diện |
Native Mac, Electron cho Windows và Linux |
Java, đa nền tảng |
Dòng lệnh, web |
Java, đa nền tảng |
Mục đích |
Gỡ lỗi ứng dụng |
Gỡ lỗi ứng dụng |
Gỡ lỗi, tự động hoá |
Kiểm thử bảo mật |
Hỗ trợ iOS |
Rất tốt, cài tự động |
Tốt |
Tốt |
Tốt |
Script |
JavaScript |
Hạn chế |
Python |
Tiện ích mở rộng |
Giá |
Miễn phí khi bắt đầu, có bản PRO |
Trả phí |
Miễn phí |
Community miễn phí |
Chọn công cụ nào
Lập trình viên iOS dùng Mac thường thấy Proxyman nhẹ và hợp mắt nhất. Ai đã quen Charles nhiều năm có thể tiếp tục, bài Charles proxy là gì có đủ hướng dẫn. Cần tự động hoá bằng Python thì mitmproxy mạnh hơn. Còn mục tiêu là tìm lỗ hổng bảo mật thì Burp Suite proxy là công cụ chuyên dụng.
Sửa lỗi thường gặp với Proxyman
Phần lớn lỗi rơi vào ba nhóm: không thấy traffic, thấy traffic nhưng HTTPS lỗi, và ứng dụng mất mạng khi bật công cụ. Mỗi nhóm có cách kiểm tra riêng.
Không thấy traffic từ điện thoại
Kiểm tra theo thứ tự: điện thoại và máy tính có cùng mạng wifi không, IP và cổng trong cài đặt proxy có đúng không, có ứng dụng VPN nào đang bật không. Mạng wifi công ty hoặc quán cà phê thường bật chế độ cách ly thiết bị, khiến điện thoại không gọi được máy tính. Dùng điểm phát wifi từ chính máy tính là cách vượt qua nhanh.
Thấy request nhưng HTTPS báo lỗi
Nếu request hiện ra nhưng báo lỗi SSL, chứng chỉ chưa được tin tưởng hoặc ứng dụng dùng certificate pinning. Kiểm tra lại bước Certificate Trust Settings trên iOS và tab User trên Android. Với ứng dụng của chính mình có pinning, tạo bản debug tắt pinning.
Ứng dụng mất mạng khi bật Proxyman
Một số ứng dụng hệ thống từ chối đi qua proxy có chứng chỉ lạ và báo mất kết nối. Tắt SSL Proxying cho các tên miền không liên quan, chỉ bật cho tên miền đang gỡ lỗi. Khi tắt Proxyman, nhớ để công cụ trả lại cài đặt proxy hệ thống, nếu không trình duyệt sẽ báo lỗi kết nối.
Ứng dụng không đi qua proxy hệ thống
Một số ứng dụng trên Mac được lập trình bỏ qua proxy hệ thống, kết nối thẳng ra ngoài. Trang chủ Proxyman giới thiệu tính năng Network Extension, đang ở dạng thử nghiệm và thuộc bản PRO, để bắt lưu lượng của cả những ứng dụng này. Khi chưa có bản PRO, anh em có thể kiểm tra xem ứng dụng có tuỳ chọn proxy riêng trong cài đặt không, hoặc dùng biến môi trường nếu đó là ứng dụng dòng lệnh.
Kết luận
Proxyman là công cụ gỡ lỗi HTTP và HTTPS gọn nhẹ, hợp nhất với lập trình viên iOS dùng Mac và đủ tốt cho Android. Anh em cài chứng chỉ, bật SSL Proxying theo tên miền, dùng Breakpoint, Map Local và Scripting để thử mọi tình huống. Cần proxy đi ra cho kiểm thử theo vùng, hãy liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam khi dùng Proxyman.