Charles Proxy — یک سرور پروکسی چندسکویی برای اشکالزدایی ترافیک HTTP/HTTPS است که توسط توسعهدهندگان برای ضبط، مشاهده و تغییر درخواستهای شبکه استفاده میشود. به گفته Karl von Randow، سازنده ابزار (2025)، Charles از سال 2004 در بیش از 50,000 شرکت در سراسر جهان استفاده میشود. پروکسی از ضبط ترافیک از دستگاههای موبایل از طریق WiFi، پروکسی HTTPS با نصب گواهی ریشه و مجموعه گستردهای از ابزارهای تحلیل API پشتیبانی میکند.
نکات اصلی
Charles Proxy — یک پروکسی HTTP و مانیتور HTTP است که به عنوان واسطه بین کلاینت و سرور عمل میکند. تمام درخواستها و پاسخها از Charles عبور میکنند که امکان مشاهده محتوای آنها، تحلیل ساختار، تغییر دادهها در زمان واقعی و شبیهسازی شرایط مختلف شبکه را فراهم میکند. قابل دسترس برای Windows، macOS و Linux.
Charles Proxy در سال 2004 توسط Karl von Randow ساخته شد و یکی از محبوبترین ابزارها برای اشکالزدایی ترافیک شبکه باقی مانده است. برخلاف جایگزینهای رایگان، Charles مجوز پولی با دوره آزمایشی 30 روزه ارائه میدهد. این ابزار به عنوان یک راهحل حرفهای برای توسعهدهندگان برنامههای موبایل، توسعهدهندگان وب و مهندسان QA که به کنترل کامل بر ارتباطات HTTP نیاز دارند، جایگاهیابی شده است.
Charles به عنوان پروکسی سیستمی روی کامپیوتر کار میکند و میتواند ترافیک هر دستگاهی را در یک شبکه ضبط کند: Android، iOS، شبیهسازها، شبیهسازهای الکترونیکی، مرورگرهای وب و دستگاههای IoT. برای ضبط HTTPS باید گواهی ریشه Charles را روی هر دستگاه نصب کنید. ترافیک در HTTP/1.1 و HTTP/2 (تا حدی) پشتیبانی میشود. HTTP/3 (QUIC) در سطح ضبط پشتیبانی نمیشود.
Charles بر اساس اصل پروکسی MITM (Man-in-the-Middle) کار میکند: وقتی کلاینت درخواستی را از طریق Charles ارسال میکند، ابزار این درخواست را ضبط میکند، به سرور مقصد هدایت میکند، پاسخ را دریافت و آن را به کلاینت برمیگرداند. تمام ترافیک از Charles عبور میکند که امکان تحلیل و تغییر آن را فراهم میکند.
Charles هنگام راهاندازی یک پروکسی HTTP محلی روی پورت 8888 (پیشفرض) ایجاد میکند. سیستم عامل یا برنامه برای استفاده از این پروکسی تنظیم میشود. تمام درخواستهای HTTP ابتدا به Charles ارسال میشوند که سپس به عنوان یک کلاینت کامل برای سرور مقصد عمل میکند. برای HTTPS، Charles از تکنیک SSL-پروکسی خود استفاده میکند: برای هر دامنه گواهیای در لحظه تولید میکند که با گواهی ریشه Charles امضا شده است. اگر گواهی ریشه روی دستگاه به عنوان معتبر نصب شده باشد، Charles میتواند ترافیک HTTPS را رمزگشایی و مشاهده کند.
Charles از دو حالت پشتیبانی میکند: Proxy (سرور پروکسی کلاسیک) و SOCKS Proxy (برای ترافیک UDP و TCP). برای توسعه وب از HTTP-proxy استاندارد استفاده میشود. برای دستگاههای موبایل — تنظیمات WiFi Proxy روی دستگاه با مشخص کردن آدرس IP کامپیوتری که Charles روی آن اجرا میشود. MacOS از تنظیم خودکار پروکسی برای شبیهساز iOS پشتیبانی میکند.
<!-- تنظیم network_security_config.xml برای Android با پشتیبانی Charles -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- اعتماد به گواهی Charles در ساخت Debug -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy مجموعهای از ابزارهای حرفهای برای تحلیل و تغییر ترافیک فراتر از ضبط ساده درخواستها ارائه میدهد.
ابزار Rewrite امکان تغییر خودکار بخشهای خاصی از درخواستها یا پاسخها را فراهم میکند: هدرها، پارامترهای URL، بدنه پاسخ. به عنوان مثال، میتوان هدر User-Agent را با مقدار دستگاه دیگری جایگزین کرد یا کوکیهای خاصی را حذف کرد. Breakpoints مانند دیباگر کار میکنند: درخواست در مرحله انتخاب شده (قبل از ارسال یا قبل از دریافت) متوقف میشود و توسعهدهنده میتواند محتوای آن را دستی تغییر دهد. این برای آزمایش پردازش پاسخهای خطا یا حالتهای غیراستاندارد مفید است.
Map Local امکان جایگزینی منبع شبکه (CSS، JS، JSON) با یک فایل محلی روی دیسک را فراهم میکند. این برای توسعه فرانتاند ضروری است: میتوان CSS/JS را تغییر داد و بلافاصله نتیجه را بدون استقرار روی سرور دید. Map Remote درخواستها را از یک URL به URL دیگر هدایت میکند — مثلاً از سرور تولید به staging برای آزمایش. هر دو ابزار بر اساس الگوهای URL با پشتیبانی از wildcards کار میکنند.
ابزار Throttle امکان شبیهسازی انواع مختلف اتصالات شبکه را بر اساس پروفایلهای از پیش تعیینشده فراهم میکند: 3G، EDGE، GPRS، DSL، WiFi. میتوان محدودیت سرعت (دانلود/آپلود)، تأخیر، از دست دادن بسته و پایداری را تنظیم کرد. این برای آزمایش رفتار برنامه در اتصال آهسته یا ناپایدار حیاتی است — پردازش صحیح تایماوتها، تلاشهای مجدد، حالت آفلاین.
| پروفایل | دانلود | آپلود | تأخیر | سناریوی معمول |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | آزمایش با سیگنال ضعیف موبایل |
| EDGE | 130 kbps | 50 kbps | 400 ms | اتصال فوقالعاده آهسته |
| GPRS | 50 kbps | 20 kbps | 500 ms | حداقل اتصال ممکن |
| DSL | 2 Mbps | 256 kbps | 50 ms | اتصال سیمی خانگی |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | اتصال WiFi خوب |
Charles میتواند به طور خودکار جلسات ترافیک را در فایلهای .chls ذخیره کند که امکان تحلیل بعدی یا ارسال به همکاران را فراهم میکند. Recording Control امکان تنظیم انعطافپذیر اینکه کدام ترافیک ذخیره شود را فراهم میکند: بر اساس دامنهها، انواع محتوا، کدهای وضعیت. این برای نظارت طولانیمدت API مفید است.
برای اشکالزدایی ترافیک برنامههای موبایل، Charles به عنوان WiFi Proxy تنظیم میشود: تمام دستگاههای موجود در یک شبکه با کامپیوتر میتوانند ترافیک را از طریق Charles هدایت کنند. تنظیمات صحیح HTTPS نیاز به نصب گواهی Charles روی دستگاه موبایل دارد.
برای Android لازم است: Settings → WiFi → Advanced → Proxy را باز کنید، Manual را انتخاب کرده و آدرس IP کامپیوتر با پورت 8888 را وارد کنید. سپس مرورگر را روی دستگاه باز کرده و به آدرس http://chls.pro/ssl برای دانلود گواهی Charles بروید. در Android 7+ (API 24+) برای اعتماد به گواهیهای کاربر در ساخت Debug به network_security_config.xml نیاز است — در غیر این صورت برنامه ممکن است ترافیک را از Charles عبور ندهد.
برای iOS: Settings → WiFi → تنظیم پروکسی روی IP و پورت 8888. سپس Safari → http://chls.pro/ssl → نصب پروفایل گواهی. در iOS 10.3+ لازم است اعتماد به گواهی را فعال کنید: Settings → General → About → Certificate Trust Settings → Charles Proxy را فعال کنید. iOS در مورد گواهیها سختگیرانهتر است: برخی برنامهها ممکن است از SSL Pinning استفاده کنند که ترافیک را حتی با گواهی معتبر از Charles مسدود میکند.
اگر برنامه از SSL Pinning (ثابت کردن گواهی سرور) استفاده میکند، پروکسی استاندارد از طریق Charles کار نخواهد کرد — برنامه گواهی Charles را رد میکند. راهحلها: غیرفعال کردن SSL Pinning در ساخت Debug از طریق تنظیمات OkHttp یا URLSession، استفاده از Frida برای دور زدن pinning در زمان اجرا، یا استفاده از Android Emulator با دسترسی روت.
Charles Proxy وظایف مشخص توسعه و آزمایش را حل میکند. بیایید رایجترین سناریوهایی که ابزار در آنها ضروری است را بررسی کنیم.
رایجترین سناریو — بررسی صحت درخواستهای API. Charles URL دقیق درخواست، هدرها، بدنه، پارامترها را نشان میدهد. اگر سرور پاسخ غیرمنتظرهای برگرداند، بلافاصله قابل مشاهده است: ساختار JSON، کد خطا، هدرهای پاسخ. این امکان را فراهم میکند که خطای سمت کلاینت را از خطای سمت سرور بدون لاگ از هر دو طرف تشخیص دهیم.
با استفاده از پروفایلهای Throttle میتوان بررسی کرد که برنامه در سرعت پایین اتصال چگونه رفتار میکند: آیا نشانگر بارگیری نمایش داده میشود، آیا تایماوت به درستی پردازش میشود، آیا UI در صورت قطع اتصال قفل میشود. به ویژه آزمایش کش کردن مهم است — اگر دادهها قبلاً بارگیری شدهاند، برنامه باید آنها را از کش نمایش دهد، نه اینکه وارد بارگیری بینهایت شود.
با استفاده از Breakpoints میتوان پاسخ سرور را تغییر داد قبل از اینکه به برنامه ارسال شود. مثلاً برگرداندن آرایه خالی به جای دادهها، تغییر کد وضعیت به 500، اضافه کردن فیلد جدید به JSON. این امکان بررسی پردازش موارد مرزی را بدون تغییر کد سرور فراهم میکند — یکی از قدرتمندترین کاربردهای Charles در توسعه موبایل.
سوالات متداول
Charles Proxy یک محصول تجاری با دوره آزمایشی 30 روزه است. پس از پایان دوره آزمایشی، برنامه با 30 دقیقه وقفه در هر بار راهاندازی به کار خود ادامه میدهد. هزینه مجوز 50 دلار برای هر نسخه است. جایگزینهای رایگانی مانند Proxyman (macOS) و mitmproxy (چندسکویی) وجود دارند.
بله، شبیهساز iOS به طور خودکار از پروکسی سیستمی macOS استفاده میکند. کافی است Charles را راهاندازی کرده و SSL-پروکسی را فعال کنید — تمام ترافیک شبیهساز ضبط خواهد شد. تنظیم گواهی برای شبیهساز به طور خودکار انجام میشود، فقط باید به گواهی Charles در زنجیره کلید macOS اعتماد کنید.
تفاوتهای اصلی: Charles چندسکویی است (Windows، macOS، Linux)، Proxyman — فقط macOS و iOS. Charles مجموعه ابزارهای گستردهتری دارد (Rewrite، Map Local، Repeat، Auto Save)، اما پولی است. Proxyman برای عملکرد پایه رایگان است، با رابط مدرن و یکپارچهسازی بومی با شبیهساز iOS.
Charles هنگام عبور ترافیک از پروکسی تأخیر اضافه میکند، به ویژه در SSL-پروکسی فعال (رمزگشایی/رمزگذاری). در کامپیوترهای مدرن، تأخیر 5–15 میلیثانیه به ازای هر درخواست است. برای آزمایش عملکرد، توصیه میشود SSL-پروکسی را برای منابع ایستا (CSS، JS، تصاویر) از طریق Recording Control غیرفعال کنید.
Charles از صادرات به فرمتهای: .chls (فرمت اختصاصی برای باز کردن مجدد در Charles)، HAR (HTTP Archive، قابل باز شدن در مرورگرها و سایر ابزارها)، CSV (برای پردازش در Excel یا صفحات گسترده)، Trace (برای صادرات درخواست خاص در فرمت سازگار با curl) پشتیبانی میکند. صادرات از طریق منوی File → Export Session انجام میشود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید