Komut satırı HTTP araçları — cURL
Bu flood’da komut satırından HTTP
istekleri yapmamızı sağlayan araçlardan cURL
'den bahsedeceğim.
cURL
, HTTP
istemci olarak bilinse de aslında FTP
, LDAP
, SMTP
, vb birçok popüler internet protokolü için istemci olarak kullanılabilmektedir. Komut satırından kullanılan cURL
protokol işlemleri için birçok dilde binding
'i bulunan libcurl
adlı kütüphaneyi kullanır. Bu binding
'ler sayesinde herhangi bir programlama dilinde geliştirilen bir uygulamada libcurl
tarafından desteklenen internet protokolleri kolaylıkla uygulamaya entegre edilebilmektedir. Sonuç olarak etrafımızda gördüğümüz birçok cihazda libcurl
kullanılmaktadır.
Yukarıdaki kısa girişten sonra şimdi cURL
'i HTTP
istemci olarak güçlü kılan özellikleri tanımaya başlayalım. cURL
'in en çok kullanılan özelliği şüphesiz bir URL'nin erişilebilir olup olmadığını kontrol etmektir. Aşağıda bir örnek gösterilmiştir.
Anlaşıldığı üzere yukarıdaki örnekte ilgili URL’e bir HTTP GET
isteği atılmıştır. PUT
, POST
, DELETE
tipinde HTTP
istekleri atmak için -X (--request)
opsiyonu kullanılır. Aşağıdaki örnekte sunucuya bir PUT
isteği gönderilmiştir.
HTTP
isteğinin header
'ına eklenmek istenen parametreler için -H (--header)
opsiyonu kullanılır. Aşağıdaki örnekte bir önceki ekran çıktısında gönderilen istek tekrarlanmış fakat bu kez istek içeriğinin JSON
olduğu header
yardımıyla belirtilmiştir.
HTTP
isteklerinin cevapları (özellikle dosya indirilirken), ekran yerine bir dosyaya yönlendirilebilir. -O, (--remote-name)
opsiyonu bu amaçla kullanılır ve indirilen dosyayı uzaktaki kaynakla aynı isimle isimlendirir. -o, (--output)
ile ise dosya ismi değiştirilebilir.
Yukarıda verilen bazı ekran çıktılarında progress bar
görülmekte bazılarında ise görülmemektedir. cURL
'in çıktısı gerek -O
veya -o
gerekse de pipe |
ile stdout
(ekran) dışında bir dosyaya yönlendirildiğinde stdout
'ta progress bar
gösterilmektedir.
cURL
çıktısı ekrana verildiğinde, normal çıktı ile karışmaması için progress bar
gizlenmektedir. Bazı durumlarda cURL
'in çıktısı dosyaya yönlendirilse bile ekranda progress bar
'in görüntülenmesi istenmeyebilir. progress bar
'i gizlemek için -s, (--silent)
kullanılır.
cURL
ön tanımlı olarak web sunucunun redirect
taleplerini takip etmemektedir. redirect
'lerin takip edilmesi için -L, (--location)
kullanılabilir. cURL
ön tanımlı olarak maksimum 50 redirect
isteğini takip etmektedir. Bu sayı --max-redirs
ile değiştirilebilir.
cURL
ile yapılan HTTP
isteği ve alınan cevabın header
'lar ve diğer detayları ile birlikte görüntülenmesi için -v, (--verbose)
opsiyonu kullanılabilir. Bu opsiyon yeterli gelmezse --trace
ya da --trace-ascii
opsiyonları kullanılabilir.
Otomasyon betiklerinde kullanıldığında cURL
'in 2xx
olmayan sunucu cevaplarında hata tespiti için 0
'dan farklı bir çıkış kodu üretmesini isteriz. Bu durumda -f, (--fail)
opsiyonu kullanılır.
Geliştirme ortamlarında bulunan self-signed
sertifikalara yapılan HTTPS
isteklerinde sertifika hatalarını atlatmak için -k, (--insecure)
opsiyonu kullanılır.
cURL
popüler olarak kullanıldığı için HTTP
ile ilgili birçok araç cURL
komutlarının üretilmesini kolaylaştırmaktadır. Aşağıda Chrome
'dan yapılan bir isteğin cURL
karşılığının nasıl üretileceği gösterilmiştir.
Son olarak cURL
yaptığı HTTP
isteği ile ilgili detaylı zamanlama bilgisini tutmaktadır. Bu bilgi sayesinde performans problemi olan isteklerin hangi aşamada (TCP
, DNS
, sunucu, vb) yavaş olduğu tespit edilebilir.
Bu flood’da öne çıkan özellikleri ile cURL
'i inceledik. İlerleyen flood'larda ise HTTPie
ve Postman
araçlarının çarpıcı ve kullanışlı özelliklerini inceleyeceğiz.