İçeriğe geç
Muslu Yüksektepe

reqs2curl

Python requests ile hazırlanan bir isteği aynı işi yapan curl komutuna çeviren araç.

reqs2curl, Python'un requests kütüphanesiyle gönderilmiş bir HTTP isteğini aynı isteği yapan bir curl komutuna çeviren küçük bir yardımcı. 2020 yılında Python 3 için yazdım. Tek bir fonksiyondan oluşuyor ve hiçbir dış bağımlılığı yok.

Amaç

Bir API ile çalışırken isteğin neden beklendiği gibi sonuçlanmadığını anlamak için çoğu zaman aynı isteği terminalde tekrar denemek ya da karşı taraftaki ekibe göndermek gerekiyor. Python kodundaki bir isteği başlıklarıyla ve gövdesiyle birlikte elle curl komutuna dönüştürmek hem zaman alıyor hem de hataya açık. reqs2curl'ü bu dönüşümü tek satırla yapabilmek için hazırladım. curl, komut satırından HTTP isteği göndermeye yarayan ve hemen her sistemde bulunan bir araç.

Nasıl çalışır

requests ile bir istek gönderildiğinde dönen yanıt nesnesinin içinde, gerçekte gönderilen isteğin hazırlanmış hâli de bulunuyor. to_curl fonksiyonu bu hazırlanmış isteği alıyor. Önce isteğin yöntemini -X parametresiyle komuta ekliyor. Ardından istekteki her başlığı ayrı bir -H parametresine çeviriyor; yalnızca User-Agent başlığının yerine kendi tanımladığım sabit bir değer yazıyor. İstekte gövde varsa ve bayt olarak tutuluyorsa önce UTF-8 metne çeviriyor, sonra -d parametresiyle ekliyor. En sonda isteğin adresini komutun sonuna koyuyor.

Fonksiyonun ikinci parametresi olan verify değeri False verilirse komuta --insecure ekleniyor. Bu, requests tarafında SSL sertifika doğrulaması kapatılarak gönderilen bir isteğin curl tarafında da aynı şekilde çalışmasını sağlıyor.

Öne çıkan özellikler

  • İsteğin yöntemini, başlıklarını, gövdesini ve adresini tek bir curl komutunda topluyor.
  • Bayt olarak tutulan gövdeyi okunabilir metne çeviriyor.
  • Sertifika doğrulaması kapalı istekler için uygun curl parametresini ekliyor.

Teknik altyapı

Kod tek bir Python dosyasından ve tek bir fonksiyondan oluşuyor. Komutu f-string ifadeleriyle parça parça kuruyor ve sonunda boşlukla birleştiriyor. requests kütüphanesine doğrudan bağımlı değil; yalnızca requests'in ürettiği istek nesnesinin alanlarını okuyor.

Durum

Depodaki README örneğinde fonksiyon convert_curl adıyla geçiyor, koddaki asıl adı ise to_curl. Kullanırken koddaki adı esas almak gerekiyor. Proje 2020'den bu yana güncellenmedi.

Kullanım alanları

  • Bir API isteğinin hatasını ayıklarken isteği terminalde birebir tekrar etmek için kullanırım.
  • Entegrasyon sorunu yaşadığım bir servisin destek ekibine, gönderdiğim isteği çalıştırılabilir bir komut olarak iletebilirim.
  • API belgelerine örnek istek eklerken Python kodundan curl örneği üretmek işimi hızlandırıyor.
Kategori
Geliştirici araçları
Yıl
2020

Teknolojiler

  • Python
  • HTTP
  • CLI

Bağlantılar

  • GitHub https://github.com/muslu/reqs2curl

Tüm projelere dön