Charles Proxy — Rewrite Kullanımı

Erhan Saltan
Delivery Hero Tech Hub
4 min readFeb 8, 2022

Charles kurulumu ve telefon bağlantısıyla ilgili bir çok yazı mevcut ama pek azı belirli örneklerle araçların kullanımını anlatmakta. Rewrite aracının kullanımını belirli ve işlevsel örneklerle açıklamaya çalışacağım.

Rewrite aracı Charles üzerinden geçen istek ve yanıtları (request, response) değiştiren kurallar yazmaya imkan verir. İstek üzerinde bu kadar özgürce değişiklik yapma imkanı veren Charles’ın başka bir aracı bulunmuyor, yalnızca Map Remote aracıyla mevcut sürüm test ortamına bakarken belirlenen servis ya da servisleri canlı ortamına bakacak şekilde ayarlamak mümkün ve aynı düzenlemeyi Rewrite ile de yapabiliyoruz. Uygulama içerisinde Tools tabı altında Rewrite seçilir.

Tabii ki aracın aktif olması için Enable Rewrite seçili olmalı. Debug in Error Log seçeneği de eklenen kuralın çalışırkenki durumunu izlemeye yarayan bir seçenektir. Bu verileri izlemek için yukarı tabdaki Window>Error Log sekmesi seçilmelidir. Bu sayede kuralın aldığı hatalar ve işleyişi görülebilir. Export ile seçilen bir kural xml olarak dışa aktarılabilir, Import ile daha önce kaydedilmiş bir kural xml’i listeye eklenebilir. Add seçeneği ile yeni bir kural eklenir.

Name alanıyla tabii ki oluşturulan kurala isim verebiliyoruz. İlk kutucuk altındaki Add ile hangi serviste çalışma yapılacağı bilgisi girilir.

Bu penceredeki alanları elle girmek yerine, kopyaladığınız urli herhangi bir alana yapıştırdıktan sonra diğer boş alanlardan birine tıklandığında otomatik olarak url deki değerleri gerekli yerlere dağıtmaktadır. Bazı servis urlleri query alanı bulundurmamakta, değişken değerlerini istek içerisinde atmaktadır. Bu gibi servislerde query alanı boş kalacaktır. Ama query değerleri bulunan servislerde direkt belirli bir değişken yakalanmak istenirse bu alana yazılır.

Örneğe geçmeden önce bu pencerede yazan “Boş alanlar bütün değerlerle eşleşir. Wildcardlar * ve ? sembolleri kullanılabilir.” metnindeki Wildcard lar nelerdir biraz bakalım. Wildcard burada da belirtildiği üzere arama yapılırken kullanılabilecek özel karakterlerdir ve * sembolü; öncesine ve sorasına konduğu karakterlerin bütün versiyonlarını yakalamaya yarar. Ör: log* yazıldığında login de logout da yakalanır. ? sembolü; öncesine ve sonrasına konduğu karakterlerin bir karakterlik bütün versiyonlarını ya da boşluğu yakalamaya yarar. Ör: disc? yazıldığıında disc ve disco kelimelerini bulur discovery i bulmaz. Tabii bu karakterler kelime öncesine de yazılabilir.

Tip (Type) seçiminde 4 ana başlık bulunmaktadır; header, URL, query, body. Where alanı ile bu kuralın istekte mi yanıtta mı ya da ikisi bir arada değişiklik yapılacağı seçilir. Match alanı değişiklik yapılması istenen parametre ya da alanın bulunması için gerekli bilgilerin girilmesi gereken alandır. Name alanı query ve header tiplerinde açıktır, diğer seçimlerde sadece değer değişmektedir. Eğer birebir parametre veya değer seçilmeyecekse regex tiklenerek arama yapılabilir. Replace alanı da gönderilmesi istenen değeri ifade etmektedir.

Konum Servisi ile Rakam Manipülasyon Örneği

Konum ile ilgili servislerde enlem boylam değerlerinin manipülasyonu gerekebilmektedir. Örnek olarak qqq.qqq.com/geo/Latitude=35.89323&Longitude=89.83424 servisinin çağrıldığını var sayalım.

Query alanında bu servisi yakalayabilmek için *Latitude=4* yazdım ama birden çok servis isteği yapılıyor ve farklı değerler alıyorsa daha da ayrıntılı bir arama parametresi yazılmalıdır. Bu değerlerle konum servisimizin yakalanabilir.

Tip olarak Modify Query Param seçilir. Match altındaki Name alanına Latitude yazıyoruz, burada büyük küçük harfe dikkat etmek gerek. Serviste ne atılıyorsa aynısı yazılmalıdır. Değer alanına 35\.\d* yazdım ve Regex i tikledim. Buradaki regex kullanımını incelersek; 35 ile başlayan, \. sonrasında nokta bulunan, \d sonrasında rakam bulunan, * bütün karakterler anlamına gelmektedir. Replace alanına da sadece değer değişikliği yapacağım için Name i sabit bırakıp, Value alanına gönderilmesini istenen değer girilir. Konum servislerinde bir de boylam değeri mevcut bunun için yeni bir rewrite kuralı eklemeden mevcut kuralımızın içerisine Longitude için de bir ekleme yapabiliriz. Regex alıştırmaları için de burayı kullanabilirsiniz.

Şehir Değeri ile Harf Manipülasyon Örneği

Harf değeri değişiminde şehir bilgisinin atıldığı qqq.qqq.com/location/City=TR-ISTANBUL servisinin çağrıldığını var sayalım. Üstteki örnekte olduğu gibi servisi yapıştırıp query alanına *City* yazarak kural eklenir. Yalnızca value alanına sadece metin aradığımız için (TR-\w*) yazarak eşleşme sağlayabiliriz. \w ile alfanumerik ifadeler yakalanabilir.

Body İçerisindeki Request Manipülasyon Örneği

Bazı servisler içerisindeki parametreler Body içerisinde bulunmaktadır. qqq.qqq.com/VersionInfo servisini yakalamak istediğimizde alana yapıştırırız. Zaten query bulunmadığından o alan da boş kalır.

Değişiklik yapılacak kural ekleme alanını açtığımızda Tip olarak Body seçilir. Match alanındaki Value kısmı boş bırakılarak Match Whole Value tiklenir. Bu sayede tek bir alan değiştirmek yerine bütün requesti güncelleyebilir duruma geliriz. Bu işlemi önceki örneklerde de kullanabiliriz. Replace kısmındaki value alanına gönderilmesini istediğimiz requesti herhangi bir metin düzenleme programı yardımıyla değiştirerek yapıştırırız.

--

--