Charles Proxy, bir man-in-the-middle proxy gibi davranarak HTTP isteklerinde hata ayıklamayı kolaylaştırır; istemci uygulaması ile hedef sunucular arasındaki tüm ağ trafiğini yakalar, incelenmesine ve değiştirilmesine olanak tanır.
Charles Proxy yerel bir HTTP proxy sunucusu olarak çalışır ve geliştiricilerin ile QA mühendislerinin ağ iletişimini gözlemlemesini, araya girmesini ve üzerinde değişiklik yapmasını sağlar. Bu yetenek; istemci-sunucu etkileşimlerini anlamak, entegrasyon sorunlarını teşhis etmek, uç durumları test etmek ve API davranışını doğrulamak için kritiktir; özellikle upstream bir proxy ile etkileşen servislerle çalışırken veya bu servisleri geliştirirken.
Charles Proxy'yi Kurma
Kurulum ve İlk Çalıştırma
Charles Proxy'yi resmi web sitesinden indirip kurun. İlk çalıştırmada Charles genellikle kendisini sistem proxy'si olarak yapılandırmayı dener. Sistem proxy ayarlarına uyan uygulamaların trafiğini Charles'ın yakalayabilmesi için bu istemi kabul edin.
Sistem Proxy Ayarlarını Yapılandırma
Charles çalışırken sistemin HTTP/HTTPS proxy ayarlarını otomatik olarak 127.0.0.1 (localhost) ve 8888 portuna (varsayılan) ayarlar. Web tarayıcıları dâhil çoğu uygulama bu ayarlara uyar.
Doğrulamak veya elle yapılandırmak için:
* macOS: Sistem Ayarları > Ağ > Wi-Fi/Ethernet > Ayrıntılar > Proxy'ler. "Web Proxy (HTTP)" ve "Secure Web Proxy (HTTPS)" seçeneklerinin etkin olduğundan ve 127.0.0.1:8888 adresini gösterdiğinden emin olun.
* Windows: Ayarlar > Ağ ve İnternet > Proxy > El ile proxy kurulumu. "Proxy sunucusu kullan" seçeneğinin 127.0.0.1 ve 8888 portuyla etkin olduğundan emin olun.
* Linux (GNOME): Ayarlar > Ağ > Ağ Proxy'si. Yöntemi "Manuel" olarak ayarlayın ve HTTP/HTTPS proxy'yi 127.0.0.1:8888 şeklinde yapılandırın.
İstemci Uygulamalarını Yapılandırma
Bazı uygulamalar, özellikle komut satırı araçları veya belirli SDK'lar, sistem genelindeki proxy ayarlarına uymayabilir. Bu durumlarda uygulamayı doğrudan yapılandırın.
Örnek: proxy ile curl
curl -x http://127.0.0.1:8888 https://api.example.com/data
Örnek: proxy ile Node.js axios
const axios = require('axios');
axios.get('https://api.example.com/data', {
proxy: {
host: '127.0.0.1',
port: 8888
}
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
HTTPS Trafiği için SSL Proxying
HTTPS trafiğini incelemek için Charles Proxy'nin SSL (veya TLS) proxying yapması gerekir. Bu işlemde Charles, hedef alan adları için sertifikalar üretip imzalar, bunları istemciye sunar ve ardından gerçek sunucuya kendi güvenli bağlantısını kurar.
Charles Kök Sertifikasını Yükleme
SSL proxying'in güvenlik uyarıları olmadan çalışması için istemci uygulamasının Charles'ın kök sertifikasına güvenmesi gerekir.
- Masaüstü Tarayıcılar/Sistem:
Help > SSL Proxying > Install Charles Root Certificateyolunu izleyin. Sertifikayı sistemin güvenilen kök sertifika deposuna kurmak için işletim sistemine özgü istemleri takip edin.
- Mobil Cihazlar:
- Mobil cihazı Charles'ı HTTP proxy olarak kullanacak şekilde yapılandırın (örneğin
your_mac_ip:8888). - Cihazda
chls.pro/ssladresine gidin ve sertifikayı indirip kurmak için yönergeleri izleyin.
- Mobil cihazı Charles'ı HTTP proxy olarak kullanacak şekilde yapılandırın (örneğin
Belirli Hostlar için SSL Proxying'i Etkinleştirme
Kök sertifikayı kurduktan sonra, incelemek istediğiniz belirli hostlar için SSL proxying'i etkinleştirin.
Proxy > SSL Proxying Settings...yolunu izleyin.- "Add" düğmesine tıklayın.
Host(örneğinapi.example.com, joker için*.example.comveya tüm hostlar için*) vePort(HTTPS için genellikle443, tüm portlar için*) değerlerini girin.- "OK" ve ardından tekrar "OK" düğmesine tıklayın.
Belirtilen hostlara giden trafik artık şifresi çözülerek Charles'ta görünür hâle gelecektir.
Temel Hata Ayıklama Özellikleri
Trafik İzleme ve Filtreleme
"Structure" ve "Sequence" görünümleri yakalanan istekleri gösterir.
* Sequence View: İstekleri kronolojik sırayla gösterir.
* Structure View: İstekleri host ve yola göre düzenler.
İlgili trafiğe odaklanmak için:
* Filtre Alanı: URL'leri, hostları veya içeriği eşleştirmek için Charles penceresinin üst kısmındaki filtre alanını kullanın.
* Focus Aracı: Bir isteğe sağ tıklayıp "Focus" seçeneğini seçerek diğer tüm hostları geçerli görünümden gizleyin.
* Record Düğmesi: Trafik yakalamayı başlatmak/durdurmak için kayıt düğmesini (kırmızı daire) açıp kapatın.
Breakpoint'ler
Breakpoint'ler, istekleri sunucuya gönderilmeden veya yanıtları istemciye ulaşmadan önce duraklatmanıza ve değiştirmenize olanak tanır.
Proxy > Breakpoints Settings...yolunu izleyin.- İstekler veya yanıtlar için "Add" düğmesine tıklayın.
HostvePathdeğerlerini belirtin (örneğin/login).- Bir istek/yanıt eşleştiğinde Charles duraklatır ve bir "Breakpoints" sekmesi görünür.
- Başlıkları, sorgu parametrelerini veya gövdeyi değiştirin.
- Değiştirilmiş isteği/yanıtı göndermek için "Execute" düğmesine tıklayın.
Rewrite Aracı
Rewrite aracı, isteklerde ve yanıtlarda otomatik ve kalıcı değişiklikler sağlar. Belirli sunucu davranışlarını veya istemci koşullarını elle müdahale olmadan simüle etmek için kullanışlıdır.
Tools > Rewrite...yolunu izleyin.- Rewrite'ı etkinleştirin ve yeni bir "Set" ekleyin.
HostvePathkullanarak "Locations" (kuralların uygulanacağı URL'ler) ekleyin.- Set içine "Rules" ekleyin:
- Add Header/Remove Header: HTTP başlıklarını değiştirir.
- Change Query Parameter: URL sorgu parametrelerini değiştirir.
- Body Replace: İstek/yanıt gövdesindeki metni bulup değiştirir.
- URL Replace: İstek URL'sinin parçalarını değiştirir.
Örnek: Bir API yanıt gövdesini değiştirme
Bir Rewrite kuralı, istemcinin farklı durumları nasıl işlediğini test etmek için bir JSON yanıtındaki {"status": "active"} ifadesini {"status": "maintenance"} ile değiştirebilir.
Map Local / Map Remote
Bu araçlar istekleri farklı kaynaklara yönlendirir.
-
Map Local: Uzak bir yanıt yerine yerel bir dosya sunar.
Tools > Map Local...yolunu izleyin.- Map Local'ı etkinleştirin ve yeni bir giriş ekleyin.
- Uzak URL'nin
HostvePathdeğerlerini belirtin. - Sunulacak yerel
Fileyolunu seçin.
Bu, UI değişikliklerini hızlıca test etmek veya backend'i değiştirmeden belirli API yanıtlarını simüle etmek için kullanışlıdır.
-
Map Remote: Bir URL'ye giden isteği tamamen farklı bir URL'ye yönlendirir.
Tools > Map Remote...yolunu izleyin.- Map Remote'u etkinleştirin ve yeni bir giriş ekleyin.
- Orijinal isteğin
HostvePathdeğerlerini belirtin. - Yönlendirilen istek için yeni
HostvePathdeğerlerini belirtin.
API çağrılarını bir staging ortamına veya yerel bir geliştirme sunucusuna yönlendirmek için kullanışlıdır.
Throttling
Throttling yavaş ağ koşullarını simüle eder ve performans darboğazlarını ya da yavaş veri yüklemesine bağlı UI sorunlarını tespit etmeye yardımcı olur.
Proxy > Throttle Settings...yolunu izleyin.- "Enable Throttling" seçeneğini etkinleştirin.
Bandwidth,UtilisationveLatencyparametrelerini yapılandırın.- İsteğe bağlı olarak "Only for selected hosts" seçeneğini seçin ve throttling uygulanacak belirli hostları ekleyin.
Repeat / Advanced Repeat
Bu özellikler istekleri yeniden göndermenize olanak tanır.
- Repeat: Bir isteğe sağ tıklayıp "Repeat" seçeneğini seçerek onu hemen tekrar gönderin.
- Advanced Repeat: Bir isteğe sağ tıklayıp "Advanced Repeat" seçeneğini seçerek özelleştirilebilir eşzamanlılık ve yineleme sayılarıyla birden çok kez gönderin. Bu, yük testi veya yarış koşullarını kontrol etmek için kullanışlıdır.
Upstream Proxy Etkileşimlerinde Hata Ayıklama
İstemci uygulamanız Charles'ı kullanacak şekilde yapılandırıldığında ve Charles'ın kendisi de upstream bir proxy'yi (örneğin kurumsal bir proxy) kullanacak şekilde yapılandırıldığında, Charles aracı olarak davranır.
Charles'ı upstream bir proxy kullanacak şekilde yapılandırmak için:
1. Proxy > External Proxy Settings... yolunu izleyin.
2. "Use external proxy" seçeneğini etkinleştirin.
3. Upstream proxy'niz için Host, Port ve gerekli Username/Password bilgilerini girin.
4. Upstream proxy'niz bir SOCKS proxy ise "SOCKS proxy" seçeneğini etkinleştirin.
Bu kurulumda Charles istemcinizden gelen trafiği yakalar, ardından onu upstream proxy'ye iletir. Böylece trafiği upstream proxy'ye ulaşmadan önce inceleyebilirsiniz; bu da upstream proxy'nin istekleri değiştirdiği veya belirli endpoint'leri engellediği durumları teşhis etmek için kritik önemdedir.
CHARLES PROXY: PROXY ÜZERİNDEN HTTP İSTEKLERİNDE HATA AYIKLAMA
Charles Proxy, bir man-in-the-middle proxy gibi davranarak HTTP isteklerinde hata ayıklar; istemci uygulaması ile hedef sunucular arasındaki tüm ağ trafiğini yakalar ve ayrıntılı inceleme ile değişiklik yapılmasına imkân verir.
Genel Bakış
Charles Proxy, yerel makinenizde çalışan bir HTTP proxy (HTTP/HTTPS/SOCKS) ve HTTP monitörüdür. Makineniz ile İnternet arasındaki tüm HTTP ve HTTPS trafiğini görüntülemenizi sağlar. Upstream bir proxy ile etkileşen servislerde hata ayıklarken Charles, istemci ile upstream proxy arasında konumlanacak şekilde yapılandırılabilir ve uygulamanızın tam olarak hangi istekleri gönderip aldığını görünür kılar.
İlk Kurulum
Kurulum
Charles Proxy'yi resmi web sitesinden (charlesproxy.com) indirip kurun. Charles macOS, Windows ve Linux'u destekler.
Sistem Proxy Yapılandırması
Başlatıldığında Charles genellikle kendisini sistem proxy'si olarak yapılandırmak için sorar. Bunu kabul etmek, Charles'ın sistem proxy ayarlarını kullanacak şekilde yapılandırılmış uygulamaların (örneğin çoğu web tarayıcısı, Java uygulamaları, .NET uygulamaları) trafiğini otomatik olarak yakalamasını sağlar.
Elle doğrulamak veya yapılandırmak için:
* Varsayılan HTTP/HTTPS Proxy Adresi: 127.0.0.1
* Varsayılan HTTP/HTTPS Proxy Portu: 8888
Charles'ın harici (upstream) bir proxy'ye bağlanması gereken ortamlar için:
1. Proxy > External Proxy Settings... yolunu izleyin.
2. "Use external proxy" seçeneğini işaretleyin.
3. Upstream proxy'nin Host ve Port değerlerini girin.
4. Upstream proxy gerektiriyorsa Username ve Password bilgilerini girin.
5. Upstream proxy bir SOCKS proxy ise "SOCKS proxy" seçeneğini işaretleyin.
Bu yapılandırma, Charles'ın istemcinizden gelen trafiği yakalamasını ve ardından belirtilen harici proxy üzerinden yönlendirmesini sağlar; böylece harici proxy'ye ne gönderildiğini ve ondan ne alındığını inceleyebilirsiniz.
HTTPS Trafiği için SSL Proxying
HTTP Secure (HTTPS) trafiği şifrelidir ve doğrudan incelenmesini engeller. Charles, HTTPS trafiğinin şifresini çözüp incelemek için SSL Proxying (man-in-the-middle saldırısı) kullanır.
Charles Kök Sertifikası Kurulumu
SSL Proxying yapabilmek için Charles her HTTPS alan adı için dinamik SSL sertifikaları üretir. SSL hatalarından kaçınmak için istemci uygulamanızın Charles'ın kök sertifikasına güvenmesi gerekir.
- Masaüstü İşletim Sistemleri (macOS/Windows/Linux):
Help > SSL Proxying > Install Charles Root Certificateyolunu izleyin.- Sertifikayı güvenilen kök sertifika deposuna kurmak için işletim sisteminin istemlerini takip edin.
- Mobil Cihazlar (iOS/Android):
- Mobil cihazın Wi-Fi ayarlarını Charles'ı HTTP proxy olarak kullanacak şekilde yapılandırın (Charles'ın IP adresi ve 8888 portu).
- Mobil cihazda bir tarayıcı açın ve
chls.pro/ssladresine gidin. - Charles Kök Sertifikasını güvenilir kimlik bilgisi olarak indirip kurmak için yönergeleri izleyin.
Belirli Hostlar için SSL Proxying'i Etkinleştirme
Kök sertifikayı kurduktan sonra Charles'ın hangi HTTPS hostlarının şifresini çözeceğini belirtin.
1. Proxy > SSL Proxying Settings... yolunu izleyin.
2. "Add" düğmesine tıklayın.
3. Host (örneğin api.yourdomain.com, *.yourdomain.com veya tüm hostlar için *) ve Port (genellikle 443, tüm portlar için *) değerlerini girin.
4. "OK" düğmesine tıklayın.
Temel Hata Ayıklama İşlevleri
Trafik Yakalama ve Filtreleme
Charles yakalanan trafiği iki temel görünümde gösterir:
* Sequence: İsteklerin kronolojik listesi.
* Structure: Host ve klasör yoluna göre gruplanmış hiyerarşik görünüm.
Belirli istekleri bulmak için:
* Filtre Alanı: Host, URL yolu veya içeriğe göre arama yapmak için üstteki filtre çubuğunu kullanın.
* Focus Aracı: Bir isteğe sağ tıklayıp "Focus" seçeneğini seçerek diğer tüm hostları geçerli görünümden gizleyin.
* Record Düğmesi: Trafik yakalamayı başlatmak/durdurmak için kırmızı daire simgesini açıp kapatın.
Breakpoint'ler
Breakpoint'ler, istekleri gönderilmeden veya yanıtları istemciye ulaşmadan önce elle yakalayıp değiştirmenize olanak tanır.
Proxy > Breakpoints Settings...yolunu izleyin.- "Request" veya "Response" breakpoint'leri için "Add" düğmesine tıklayın.
- Hedef URL için
HostvePathkalıplarını belirtin. - Eşleşen bir istek/yanıt oluştuğunda Charles duraklatır ve bir "Breakpoints" sekmesi görüntüler.
Headers,Query ParametersveyaBodyiçeriğini değiştirin.- Değiştirilmiş işlemle devam etmek için "Execute" düğmesine tıklayın.
Rewrite Aracı
Rewrite aracı, önceden tanımlanmış kurallara göre isteklerde ve yanıtlarda yapılan değişiklikleri otomatikleştirir. Elle müdahale olmadan tutarlı test senaryoları için kullanışlıdır.
Tools > Rewrite...yolunu izleyin.- Rewrite'ı etkinleştirin ve yeni bir "Set" ekleyin.
HostvePathkullanarak "Locations" (kuralların geçerli olduğu URL'ler) tanımlayın.- Set içine "Rules" ekleyin:
- Type:
Add Header,Remove Header,Change Query Parameter,Host,Path,URL,Body. - Action: Değişiklik için
ValueveyaRegexbelirtin.
- Type:
Örnek: API sürüm değişikliğini simüle etme
Bir Rewrite kuralı, belirli bir API endpoint'ine giden tüm isteklerde Accept başlığını application/json;v=1 yerine application/json;v=2 olarak değiştirebilir.
Map Local / Map Remote
Bu özellikler istekleri alternatif kaynaklara yönlendirir.
-
Map Local: Uzak bir sunucu yanıtı yerine yerel bir dosya sunar.
Tools > Map Local...yolunu izleyin.- Map Local'ı etkinleştirin ve yeni bir giriş ekleyin.
- Eşlenecek uzak URL'nin
HostvePathdeğerlerini belirtin. - Charles'ın sunması gereken dosyanın
Local Pathdeğerini seçin.
Bu, frontend geliştirmede backend değişikliği yapmadan belirli sahte verilerle UI değişikliklerini test etmek için kullanışlıdır.
-
Map Remote: Bir URL'ye giden isteği tamamen farklı bir URL'ye yönlendirir.
Tools > Map Remote...yolunu izleyin.- Map Remote'u etkinleştirin ve yeni bir giriş ekleyin.
- Orijinal isteğin
HostvePathdeğerlerini belirtin. - Yeni hedef URL'nin
HostvePathdeğerlerini belirtin.
Bu, üretim API çağrılarını bir staging ortamına veya yerel bir geliştirme sunucusuna yönlendirmek için kullanışlıdır.
Throttling
Throttling, uygulamanın kötü ağ bağlantısı altındaki performansını ve yanıt verme hızını test etmek için çeşitli ağ koşullarını (örneğin dial-up, 3G, özel hızlar) simüle eder.
Proxy > Throttle Settings...yolunu izleyin.- "Enable Throttling" seçeneğini işaretleyin.
- Bir
Presetseçin veyaBandwidth,UtilisationveLatencydeğerlerini elle yapılandırın. - İsteğe bağlı olarak "Only for selected hosts" seçeneğini işaretleyin ve throttling uygulanacak belirli hostları ekleyin.
Repeat / Advanced Repeat
Bu işlevler istekleri yeniden göndermenize olanak tanır.
* Repeat: Charles oturumundaki bir isteğe sağ tıklayıp "Repeat" seçeneğini seçerek onu bir kez yeniden gönderin.
* Advanced Repeat: Bir isteğe sağ tıklayıp "Advanced Repeat" seçeneğini seçerek birden çok yineleme, eşzamanlılık ve gecikme yapılandırın; temel yük testi veya idempotency doğrulaması için kullanışlıdır.
