Charles Proxy là một máy chủ proxy đa nền tảng để gỡ lỗi lưu lượng HTTP/HTTPS, được các nhà phát triển sử dụng để chặn, xem và sửa đổi các yêu cầu mạng. Theo Karl von Randow, người tạo ra công cụ (2025), Charles đã được sử dụng tại hơn 50.000 công ty trên toàn thế giới từ năm 2004. Proxy hỗ trợ chặn lưu lượng từ thiết bị di động qua WiFi, proxy HTTPS với cài đặt chứng chỉ gốc và một bộ công cụ rộng lớn để phân tích API.
Những điểm chính
Charles Proxy là một proxy HTTP và trình giám sát HTTP hoạt động như một trung gian giữa máy khách và máy chủ. Tất cả các yêu cầu và phản hồi đều đi qua Charles, cho phép bạn xem nội dung, phân tích cấu trúc, sửa đổi dữ liệu theo thời gian thực và mô phỏng các điều kiện mạng khác nhau. Nó có sẵn cho Windows, macOS và Linux.
Charles Proxy được tạo ra vào năm 2004 bởi Karl von Randow và vẫn là một trong những công cụ phổ biến nhất để gỡ lỗi lưu lượng mạng. Không giống như các lựa chọn thay thế miễn phí, Charles cung cấp giấy phép trả phí với thời gian dùng thử 30 ngày. Công cụ này được định vị là giải pháp chuyên nghiệp cho các nhà phát triển ứng dụng di động, nhà phát triển web và kỹ sư QA cần kiểm soát hoàn toàn các giao tiếp HTTP.
Charles hoạt động như một proxy hệ thống trên máy tính và có thể chặn lưu lượng từ bất kỳ thiết bị nào trên cùng mạng: Android, iOS, trình mô phỏng, trình giả lập, trình duyệt web và thiết bị IoT. Để chặn HTTPS, bạn cần cài đặt chứng chỉ gốc của Charles trên mỗi thiết bị. Lưu lượng được hỗ trợ trên HTTP/1.1 và HTTP/2 (một phần). HTTP/3 (QUIC) không được hỗ trợ ở cấp độ chặn.
Charles hoạt động theo nguyên tắc proxy MITM (Man-in-the-Middle): khi máy khách gửi yêu cầu qua Charles, công cụ sẽ chặn yêu cầu, chuyển tiếp đến máy chủ đích, nhận phản hồi và chuyển lại cho máy khách. Tất cả lưu lượng đều đi qua Charles, cho phép phân tích và sửa đổi.
Khi khởi chạy, Charles tạo một proxy HTTP cục bộ trên cổng 8888 (mặc định). Hệ điều hành hoặc ứng dụng được cấu hình để sử dụng proxy này. Tất cả các yêu cầu HTTP được gửi đến Charles trước, sau đó Charles hoạt động như một máy khách đầy đủ cho máy chủ đích. Đối với HTTPS, Charles sử dụng kỹ thuật proxy SSL riêng: nó tạo chứng chỉ ngay lập tức cho mỗi tên miền, được ký bởi chứng chỉ gốc của Charles. Nếu chứng chỉ gốc được cài đặt trên thiết bị như đáng tin cậy, Charles có thể giải mã và xem lưu lượng HTTPS.
Charles hỗ trợ hai chế độ: Proxy(máy chủ proxy cổ điển) và SOCKS Proxy(cho lưu lượng UDP và TCP). Đối với phát triển web, sử dụng proxy HTTP tiêu chuẩn. Đối với thiết bị di động — cấu hình WiFi Proxy trên thiết bị với địa chỉ IP của máy tính đang chạy Charles. macOS hỗ trợ cấu hình proxy tự động cho trình mô phỏng iOS.
<!-- Cấu hình network_security_config.xml cho Android với hỗ trợ Charles -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Tin tưởng chứng chỉ Charles trong bản Debug -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy cung cấp một bộ công cụ chuyên nghiệp để phân tích và sửa đổi lưu lượng vượt xa việc chặn yêu cầu đơn giản.
Công cụ Rewrite cho phép tự động thay đổi một số phần nhất định của yêu cầu hoặc phản hồi: tiêu đề, tham số URL, nội dung phản hồi. Ví dụ: bạn có thể thay thế tiêu đề User-Agent bằng giá trị từ thiết bị khác hoặc xóa một số cookie nhất định. Breakpoints hoạt động như một trình gỡ lỗi: yêu cầu dừng lại ở giai đoạn đã chọn (trước khi gửi hoặc trước khi nhận) và nhà phát triển có thể thay đổi thủ công nội dung của nó trước khi nó tiếp tục. Điều này hữu ích để kiểm tra xử lý các phản hồi lỗi hoặc trạng thái không chuẩn.
Map Local cho phép thay thế tài nguyên mạng (CSS, JS, JSON) bằng tệp cục bộ từ đĩa. Điều này không thể thiếu trong phát triển frontend: bạn có thể sửa đổi CSS/JS và thấy kết quả ngay lập tức mà không cần triển khai lên máy chủ. Map Remote chuyển hướng yêu cầu từ URL này sang URL khác — ví dụ: từ máy chủ sản xuất sang staging để kiểm tra. Cả hai công cụ đều hoạt động với các mẫu URL hỗ trợ ký tự đại diện.
Công cụ Throttle cho phép mô phỏng các loại kết nối mạng khác nhau bằng các hồ sơ đặt trước: 3G, EDGE, GPRS, DSL, WiFi. Bạn có thể cấu hình giới hạn tốc độ (tải xuống/tải lên), độ trễ, mất gói và độ ổn định. Điều này rất quan trọng để kiểm tra hành vi của ứng dụng khi kết nối chậm hoặc không ổn định — xử lý timeout chính xác, logic thử lại, chế độ ngoại tuyến.
| Hồ sơ | Tải xuống | Tải lên | Độ trễ | Kịch bản điển hình |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Kiểm tra với tín hiệu di động yếu |
| EDGE | 130 kbps | 50 kbps | 400 ms | Kết nối cực kỳ chậm |
| GPRS | 50 kbps | 20 kbps | 500 ms | Kết nối tối thiểu có thể |
| DSL | 2 Mbps | 256 kbps | 50 ms | Kết nối có dây gia đình |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | Kết nối WiFi tốt |
Charles có thể tự động lưu các phiên lưu lượng vào tệp .chls, cho phép bạn phân tích chúng sau này hoặc chia sẻ với đồng nghiệp. Recording Control cho phép bạn cấu hình linh hoạt lưu lượng cần lưu: theo tên miền, loại nội dung hoặc mã trạng thái. Điều này thuận tiện cho việc giám sát API dài hạn.
Để gỡ lỗi lưu lượng ứng dụng di động, Charles được cấu hình như một WiFi Proxy: tất cả các thiết bị trên cùng mạng với máy tính có thể định tuyến lưu lượng qua Charles. Cấu hình HTTPS chính xác yêu cầu cài đặt chứng chỉ Charles trên thiết bị di động.
Đối với Android: mở Settings → WiFi → Advanced → Proxy, chọn Manual và nhập địa chỉ IP của máy tính với cổng 8888. Sau đó mở trình duyệt trên thiết bị và truy cập http://chls.pro/ssl để tải chứng chỉ Charles. Trên Android 7+ (API 24+), cần có network_security_config.xml để tin tưởng chứng chỉ người dùng trong bản Debug — nếu không, ứng dụng có thể không định tuyến lưu lượng qua Charles.
Đối với iOS: Settings → WiFi → cấu hình proxy với IP và cổng 8888. Sau đó Safari → http://chls.pro/ssl → cài đặt hồ sơ chứng chỉ. Trên iOS 10.3+, bạn cần thêm bước bật tin tưởng chứng chỉ: Settings → General → About → Certificate Trust Settings → bật Charles Proxy. iOS khắt khe hơn về chứng chỉ: một số ứng dụng có thể sử dụng SSL Pinning, chặn lưu lượng qua Charles ngay cả với chứng chỉ đáng tin cậy.
Nếu ứng dụng sử dụng SSL Pinning(gắn chứng chỉ máy chủ), proxy tiêu chuẩn qua Charles sẽ không hoạt động — ứng dụng sẽ từ chối chứng chỉ Charles. Giải pháp: tắt SSL Pinning trong bản Debug qua cài đặt OkHttp hoặc URLSession, sử dụng Frida để vượt qua pinning trong thời gian chạy, hoặc sử dụng Android Emulator với quyền root.
Charles Proxy giải quyết các tác vụ phát triển và kiểm thử cụ thể. Hãy xem các kịch bản phổ biến nhất mà công cụ này không thể thiếu.
Kịch bản phổ biến nhất — kiểm tra tính chính xác của yêu cầu API. Charles hiển thị URL yêu cầu chính xác, tiêu đề, nội dung và tham số. Nếu máy chủ trả về phản hồi không mong đợi, bạn thấy ngay lập tức: cấu trúc JSON, mã lỗi, tiêu đề phản hồi. Điều này cho phép phân biệt lỗi phía máy khách với lỗi phía máy chủ mà không cần nhật ký từ cả hai phía.
Sử dụng hồ sơ Throttle, bạn có thể kiểm tra cách ứng dụng hoạt động với tốc độ kết nối thấp: chỉ báo tải có được hiển thị không, timeout có được xử lý chính xác không, UI có bị đóng băng khi mất kết nối không. Đặc biệt quan trọng là kiểm tra bộ nhớ đệm — nếu dữ liệu đã được tải, ứng dụng sẽ hiển thị dữ liệu từ bộ nhớ đệm thay vì rơi vào trạng thái tải vô hạn.
Sử dụng Breakpoints, bạn có thể sửa đổi phản hồi máy chủ trước khi nó được gửi đến ứng dụng. Ví dụ: trả về mảng rỗng thay vì dữ liệu, thay đổi mã trạng thái thành 500, thêm trường mới vào JSON. Điều này cho phép kiểm tra xử lý các trường hợp biên mà không cần sửa đổi mã máy chủ — một trong những ứng dụng mạnh mẽ nhất của Charles trong phát triển di động.
Câu hỏi thường gặp
Charles Proxy là một sản phẩm thương mại với thời gian dùng thử 30 ngày. Sau khi kết thúc thời gian dùng thử, chương trình tiếp tục hoạt động nhưng tạm dừng 30 phút mỗi lần khởi động. Chi phí giấy phép là $50 cho mỗi bản sao. Có các lựa chọn thay thế miễn phí như Proxyman (macOS) và mitmproxy (đa nền tảng).
Có, trình mô phỏng iOS tự động sử dụng proxy hệ thống macOS. Chỉ cần khởi động Charles và bật proxy SSL — tất cả lưu lượng của trình mô phỏng sẽ bị chặn. Thiết lập chứng chỉ cho trình mô phỏng diễn ra tự động; bạn chỉ cần tin tưởng chứng chỉ Charles trong chuỗi khóa macOS.
Sự khác biệt chính: Charles đa nền tảng (Windows, macOS, Linux), Proxyman chỉ dành cho macOS và iOS. Charles có bộ công cụ rộng hơn (Rewrite, Map Local, Repeat, Auto Save) nhưng trả phí. Proxyman miễn phí cho các chức năng cơ bản, với giao diện hiện đại và tích hợp gốc với trình mô phỏng iOS.
Charles thêm độ trễ khi lưu lượng đi qua proxy, đặc biệt là với proxy SSL đang hoạt động (giải mã/mã hóa). Trên máy tính hiện đại, độ trễ là 5–15 mili giây mỗi yêu cầu. Đối với kiểm tra hiệu suất, nên tắt proxy SSL cho nội dung tĩnh (CSS, JS, hình ảnh) qua Recording Control.
Charles hỗ trợ xuất sang định dạng: .chls(gốc, để mở lại trong Charles), HAR(HTTP Archive, mở trong trình duyệt và các công cụ khác), CSV(để xử lý trong Excel hoặc bảng tính), Trace(để xuất yêu cầu cụ thể ở định dạng tương thích với curl). Xuất qua menu File → Export Session.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm