Komut satırı HTTP araçları — HTTPie

Bu flood’da komut satırından HTTP istekleri yapmamızı sağlayan araçlardan biri olan HTTPie'dan bahsedeceğim.

Önceki flood’da 20'den fazla internet protokolünü destekleyen cURL'i incelemiştik, bu flood'da ise Python ile yazılan, çıktı renklendirme desteği ve HTTP'nin modern kullanımına göre ön tanımlı ayarları optimize edilen komut satırı araçlarından HTTPie'ı inceleyeceğiz.

Öncelikle HTTPie'ın kullanım kolaylığı, ekranı renklendirme biçimi ve JSON desteği ile eski bir cURL committer'ı ve her daim fanatiği olarak beni bile cezbettiğini söylemeliyim. HTTPie, kısaca http ile bir web isteği aşağıdaki gibi gönderilir.

Yukarıda görüldüğü gibi http başka bir parametre verilmediğinde parametre olarak aldığı URL'e bir GET isteği atmaktadır. Farklı tipte HTTP istekleri atmak için HTTP fiilinin parametre olarak verilmesi yeterlidir. Aşağıda bir PUT örneği gösterilmiştir.

Yukarıdaki örnekte http, PUT isteği için ön tanımlı olarak Content-Typeapplication/json olarak belirtmiştir. cURL aynı durumda Content-Type'ı form olarak ayarlamaktadır. API'laşan dünyada PUT ile gönderilen veriler çoğunlukla JSON olduğu için HTTPie kolay kullanılabilir olduğunu iddia etmektedir. HTTPie bu ve buna benzer ön tanımlı tercihlerindeki farklılıklarını Sensible Defaults olarak öne çıkarmaktadır. Günlük kullanımda bu ön tanımlı değerlerin çoğunlukla kullandığım işlevlere uyduğunu söyleyebilirim.

HTTPie ile gönderilen HTTP isteğinin header'ına eklenmek istenen parametreler için Header:Value notasyonu kullanılır. Aşağıdaki ekran çıktısında X-foo: bar başlığının sunucuya ilgili notasyon ile iletildiği gösterilmiştir.

cURL'in aksine HTTPie dosya indirmelerde dosya içeriğinin binary olduğuna kanaat getirdiğinde dosya içeriğini ekrana basmaz ve dosyayı da indirmez. Aşağıdaki ekran çıktısında belirtilen gibi bir uyarı vererek kullanıcıyı bilgilendirir.

HTTPie ile dosya indirmek için ya klasik output redirection, > operatörü ya da --download opsiyonu ile aktive edilen download mode kullanılır. Dosya ismi değiştirilmek istenirse cURL'deki gibi -o, (--output) opsiyonu kullanılır.

Download mode'da HTTPie, header ve progress barstderr'a yazmakta dosya içeriğini ise stdout'a yönlendirmektedir. Bu sayede dosya içeriği pipe, | ya da output redirection ile başka bir programa veya dosyaya gönderilebilmektedir.

Bazı HTTP sunucular Range isteklerini ve 206 Partial Content cevaplarını desteklemektedir. HTTPie, -c, (--continue) ve -o, (--output) opsiyonları ile birlikte kullanıldığında yarıda kesilmiş indirmelere devam edebilmektedir. Bu özellik cURL'de de vardır.

HTTPie da cURL gibi ön tanımlı olarak web sunucunun redirect taleplerini takip etmemektedir. redirect'lerin takip edilmesi için -F, (--follow) kullanılabilir. Aşağıdaki örnekte 2 redirect yapmaya ayarlanmış web sunucunun istekleri takip edilmiştir.

Yukarıdaki ekran çıktılarından görüldüğü üzere HTTPie sunucudan gelen HTTP cevabının başlıklarını ekranda göstermektedir. -v, (--verbose) opsiyonu seçilerek hem HTTP isteği hem de cevabının başlık bilgileri ile birlikte içeriklerine ulaşmak mümkün olur.

Otomasyon betiklerinde kullanıldığında HTTPie'ın 2xx olmayan sunucu cevaplarında hata tespiti için 0'dan farklı bir çıkış kodu üretmesini isteriz. Bu durumda --check-status opsiyonu kullanılır.

Son olarak geliştirme ortamlarında bulunan self-signed sertifikalara yapılan HTTPS isteklerinde sertifika hatalarını atlatmak için --verify=no opsiyonu kullanılır. Bu opsiyonun ön tanımlı değeri ise yes'tir.