Charles Proxy, HTTP/HTTPS trafiğinde hata ayıklamak için kullanılan, geliştiricilerin ağ isteklerini yakalamasına, görüntülemesine ve değiştirmesine olanak tanıyan çapraz platformlu bir proxy sunucusudur. Aracın yaratıcısı Karl von Randow'a (2025) göre Charles, 2004'ten beri dünya çapında 50.000'den fazla şirkette kullanılmaktadır. Proxy, WiFi üzerinden mobil cihazlardan trafik yakalamayı, kök sertifika kurulumuyla HTTPS proxy'yi ve API analizi için geniş bir araç setini destekler.
Önemli Noktalar
Charles Proxy, istemci ve sunucu arasında aracı görevi gören bir HTTP proxy ve HTTP monitörüdür. Tüm istekler ve yanıtlar Charles üzerinden geçer ve içeriklerini görüntülemenize, yapılarını analiz etmenize, verileri gerçek zamanlı olarak değiştirmenize ve çeşitli ağ koşullarını simüle etmenize olanak tanır. Windows, macOS ve Linux için kullanılabilir.
Charles Proxy, 2004 yılında Karl von Randow tarafından oluşturuldu ve ağ trafiği hata ayıklama için en popüler araçlardan biri olmaya devam ediyor. Ücretsiz alternatiflerin aksine Charles, 30 günlük deneme süresi olan ücretli bir lisans sunar. Araç, HTTP iletişimi üzerinde tam kontrol gerektiren mobil uygulama geliştiricileri, web geliştiricileri ve QA mühendisleri için profesyonel bir çözüm olarak konumlandırılmıştır.
Charles, bilgisayarda bir sistem proxy'si olarak çalışır ve aynı ağdaki herhangi bir cihazdan (Android, iOS, simülatörler, emülatörler, web tarayıcıları ve IoT cihazları) trafiği yakalayabilir. HTTPS'yi yakalamak için her cihaza Charles kök sertifikasını kurmanız gerekir. Trafik HTTP/1.1 ve HTTP/2 (kısmi) üzerinde desteklenir. HTTP/3 (QUIC) yakalama düzeyinde desteklenmez.
Charles, MITM (Man-in-the-Middle) proxy ilkesiyle çalışır: bir istemci Charles üzerinden bir istek gönderdiğinde, araç isteği yakalar, hedef sunucuya iletir, yanıtı alır ve istemciye geri gönderir. Tüm trafik Charles üzerinden geçer ve analiz edilip değiştirilebilir.
Başlatıldığında Charles, 8888 numaralı bağlantı noktasında (varsayılan) bir yerel HTTP proxy oluşturur. İşletim sistemi veya uygulama bu proxy'yi kullanacak şekilde yapılandırılır. Tüm HTTP istekleri önce Charles'a gönderilir, ardından Charles hedef sunucuya tam bir istemci olarak davranır. HTTPS için Charles kendi SSL proxy tekniğini kullanır: her etki alanı için anında bir sertifika oluşturur ve Charles kök sertifikası tarafından imzalanır. Kök sertifika cihazda güvenilir olarak kurulursa, Charles HTTPS trafiğinin şifresini çözebilir ve görüntüleyebilir.
Charles iki modu destekler: Proxy(klasik proxy sunucusu) ve SOCKS Proxy(UDP ve TCP trafiği için). Web geliştirme için standart HTTP proxy kullanılır. Mobil cihazlar için — Charles'ın çalıştığı bilgisayarın IP adresini belirterek cihazda WiFi Proxy yapılandırın. macOS, iOS simülatörü için otomatik proxy yapılandırmasını destekler.
<!-- Charles desteğiyle Android için network_security_config.xml yapılandırması -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Debug yapısında Charles sertifikasına güven -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Charles Proxy, basit istek yakalamanın çok ötesine geçen trafik analizi ve değişikliği için bir dizi profesyonel araç sağlar.
Rewrite aracı, isteklerin veya yanıtların belirli bölümlerini (başlıklar, URL parametreleri, yanıt gövdesi) otomatik olarak değiştirmenize olanak tanır. Örneğin, User-Agent başlığını başka bir cihazın değeriyle değiştirebilir veya belirli çerezleri kaldırabilirsiniz. Breakpoints bir hata ayıklayıcı gibi çalışır: istek seçilen bir aşamada (göndermeden önce veya almadan önce) durdurulur ve geliştirici devam etmeden önce içeriğini manuel olarak değiştirebilir. Bu, hata yanıtlarının veya standart olmayan durumların işlenmesini test etmek için kullanışlıdır.
Map Local, bir ağ kaynağını (CSS, JS, JSON) diskteki yerel bir dosyayla değiştirmenize olanak tanır. Bu, ön uç geliştirmede vazgeçilmezdir: CSS/JS'yi değiştirebilir ve bir sunucuya dağıtmadan hemen sonucu görebilirsiniz. Map Remote, istekleri bir URL'den diğerine yönlendirir — örneğin, test için üretim sunucusundan staging sunucusuna. Her iki araç da joker karakterleri destekleyen URL desenleriyle çalışır.
Throttle aracı, önceden ayarlanmış profilleri (3G, EDGE, GPRS, DSL, WiFi) kullanarak çeşitli ağ bağlantısı türlerini simüle etmenize olanak tanır. Hız sınırını (indirme/yükleme), gecikme süresini, paket kaybını ve kararlılığı yapılandırabilirsiniz. Bu, yavaş veya dengesiz bağlantılarda uygulama davranışını (doğru zaman aşımı işleme, yeniden deneme mantığı, çevrimdışı mod) test etmek için kritiktir.
| Profil | İndirme | Yükleme | Gecikme | Tipik Senaryo |
|---|---|---|---|---|
| 3G | 780 kbps | 330 kbps | 200 ms | Zayıf mobil sinyal ile test |
| EDGE | 130 kbps | 50 kbps | 400 ms | Aşırı yavaş bağlantı |
| GPRS | 50 kbps | 20 kbps | 500 ms | Mümkün olan minimum bağlantı |
| DSL | 2 Mbps | 256 kbps | 50 ms | Ev kablolu bağlantısı |
| WiFi | 10 Mbps | 10 Mbps | 10 ms | İyi WiFi bağlantısı |
Charles, trafik oturumlarını .chls dosyalarına otomatik olarak kaydedebilir, böylece daha sonra analiz etmenize veya meslektaşlarınızla paylaşmanıza olanak tanır. Recording Control, hangi trafiğin kaydedileceğini (etki alanına, içerik türüne veya durum koduna göre) esnek bir şekilde yapılandırmanızı sağlar. Bu, uzun vadeli API izleme için uygundur.
Mobil uygulama trafiğinde hata ayıklamak için Charles, bir WiFi Proxy olarak yapılandırılır: bilgisayarla aynı ağdaki tüm cihazlar trafiği Charles üzerinden yönlendirebilir. Doğru HTTPS yapılandırması, mobil cihaza Charles sertifikasının kurulmasını gerektirir.
Android için: Settings → WiFi → Advanced → Proxy'yi açın, Manual'i seçin ve 8888 bağlantı noktasıyla birlikte bilgisayarın IP adresini girin. Ardından cihazda bir tarayıcı açın ve Charles sertifikasını indirmek için http://chls.pro/ssl adresine gidin. Android 7+ (API 24+) üzerinde, Debug yapılarında kullanıcı sertifikalarına güvenmek için network_security_config.xml gerekir — aksi takdirde uygulama trafiği Charles üzerinden yönlendirmeyebilir.
iOS için: Settings → WiFi → proxy'yi yapılandırın IP ve 8888 bağlantı noktası ile. Ardından Safari → http://chls.pro/ssl → sertifika profilini yükleyin. iOS 10.3+ üzerinde, ayrıca sertifika güvenini etkinleştirmeniz gerekir: Settings → General → About → Certificate Trust Settings → Charles Proxy'yi açın. iOS sertifikalar konusunda daha katıdır: bazı uygulamalar SSL Pinning kullanarak güvenilir bir sertifika olsa bile Charles üzerinden trafiği engelleyebilir.
Uygulama SSL Pinning(sunucu sertifikası sabitleme) kullanıyorsa, Charles üzerinden standart proxy çalışmaz — uygulama Charles sertifikasını reddeder. Çözümler: Debug yapılarında OkHttp veya URLSession ayarları üzerinden SSL Pinning'i devre dışı bırakmak, pinning'i çalışma zamanında atlamak için Frida kullanmak veya root erişimli Android Emulator kullanmak.
Charles Proxy, belirli geliştirme ve test görevlerini çözer. Aracın vazgeçilmez olduğu en yaygın senaryolara bakalım.
En yaygın senaryo — API isteklerinin doğruluğunu kontrol etme. Charles, isteğin tam URL'sini, başlıklarını, gövdesini ve parametrelerini gösterir. Sunucu beklenmedik bir yanıt döndürürse, hemen görürsünüz: JSON yapısı, hata kodu, yanıt başlıkları. Bu, her iki taraftan günlükler olmadan istemci tarafı hatalarını sunucu tarafı hatalarından ayırmanızı sağlar.
Throttle profillerini kullanarak, uygulamanın düşük bağlantı hızında nasıl davrandığını test edebilirsiniz: yükleme göstergesi görüntüleniyor mu, zaman aşımları doğru işleniyor mu, bağlantı kaybında UI donuyor mu. Özellikle önbelleğe almayı test etmek önemlidir — veriler zaten yüklendiyse, uygulama sonsuz yükleme durumuna girmek yerine bunları önbellekten göstermelidir.
Breakpoints kullanarak, uygulamaya gönderilmeden önce sunucu yanıtını değiştirebilirsiniz. Örneğin, veriler yerine boş bir dizi döndürebilir, durum kodunu 500 olarak değiştirebilir, JSON'a yeni bir alan ekleyebilirsiniz. Bu, sunucu kodunu değiştirmeden uç durumların işlenmesini test etmenize olanak tanır — mobil geliştirmede Charles'ın en güçlü kullanımlarından biridir.
Sıkça Sorulan Sorular
Charles Proxy, 30 günlük deneme süresi olan ticari bir üründür. Deneme süresi bittikten sonra program çalışmaya devam eder ancak her başlangıçta 30 dakika duraklar. Lisans ücreti kopya başına 50 $'dır. Proxyman (macOS) ve mitmproxy (çapraz platform) gibi ücretsiz alternatifler mevcuttur.
Evet, iOS simülatörü otomatik olarak macOS sistem proxy'sini kullanır. Charles'ı başlatmanız ve SSL proxy'yi etkinleştirmeniz yeterlidir — tüm simülatör trafiği yakalanacaktır. Simülatör için sertifika kurulumu otomatik olarak gerçekleşir; yalnızca macOS anahtarlığında Charles sertifikasına güvenmeniz gerekir.
Temel farklar: Charles çapraz platformdur (Windows, macOS, Linux), Proxyman yalnızca macOS ve iOS içindir. Charles daha geniş bir araç setine sahiptir (Rewrite, Map Local, Repeat, Auto Save) ancak ücretlidir. Proxyman temel işlevler için ücretsizdir, modern bir arayüz ve yerel iOS simülatörü entegrasyonu sunar.
Charles, trafik proxy üzerinden geçerken gecikme ekler, özellikle aktif SSL proxy (şifre çözme/şifreleme) ile. Modern bilgisayarlarda gecikme, istek başına 5–15 milisaniyedir. Performans testleri için, Recording Control aracılığıyla statik içerik (CSS, JS, resimler) için SSL proxy'nin devre dışı bırakılması önerilir.
Charles şu biçimlere dışa aktarmayı destekler: .chls(yerel, Charles'ta yeniden açmak için), HAR(HTTP Archive, tarayıcılarda ve diğer araçlarda açılır), CSV(Excel veya e-tablolarda işleme için), Trace(belirli bir isteği curl uyumlu biçimde dışa aktarmak için). File → Export Session menüsü üzerinden dışa aktarın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun