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-Type
'ı application/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 bar
'ı stderr
'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.