Merhabalar. Bugün terminal üzerinde keyifle kullandığım HTTPie’ nin yeteneklerinden ve neden iyi bir cURL alternatifi olduğundan bahsetmek istiyorum.
İlk olarak;
HTTPie nedir?
HTTPie terminal üzerinde kullanılabilen interaktif ve kolay kullanımı olan bir HTTP istemcisidir.
cURL’in modern bir alternatifi olarak Python ile geliştirilmiş, günümüz geliştirme dünyasında bolca bulunan API’lar ile etkileşimi kolaylaştırma amacı taşımaktadır.
Çoklu platform desteğine sahiptir. Mac, GNU/Linux ya da Windows ortamlarına kurulup kullanılabilir. Bir çok GNU/Linux distrosunun paket repolarında ve Mac Homebrew üzerinde varsayılan olarak bulunur.
Kurulum.
Farklı distrolar icin kurulum adımlarına buradan ulaşabilirsiniz fakat Ubuntu,Debian ve Mac için kurulumu özetleyecek olursak;
# Debian, Ubuntu vs $ apt install httpie
# Macos $ brew install httpie
Kullanım.
HTTPie basit bir syntaxa sahip ve syntax kuralları aşağıdaki gibi;
http [flags] [METHOD] URL [ITEM [ITEM]]
Bir urle GET isteği atmak;
$ http get https://httpbin.org/json
HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 429 Content-Type: application/json Date: Fri, 15 Oct 2021 10:40:48 GMT Server: gunicorn/19.9.0 { "slideshow": { "author": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type": "all" }, { "items": [ "Why <em>WonderWidgets</em> are great", "Who <em>buys</em> WonderWidgets" ], "title": "Overview", "type": "all" } ], "title": "Sample Slide Show" } }
Farklı metodlar ile istek atmak için, http komutunun ardından metodun belirtilmesi yeterlidir.
POST isteği atmak ve veri göndermek.
$ http post https://httpbin.org/post name=egehan surname=gundogdu
key=value
İstek gövdesinde gönderilecek olan veri yukarıdaki format ile belirtilir.
HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 548 Content-Type: application/json Date: Fri, 15 Oct 2021 10:53:15 GMT Server: gunicorn/19.9.0 { "args": {}, "data": "{\"name\": \"egehan\", \"surname\": \"gundogdu\"}", "files": {}, "form": {}, "headers": { "Accept": "application/json, */*", "Accept-Encoding": "gzip, deflate", "Content-Length": "41", "Content-Type": "application/json", "Host": "httpbin.org", "User-Agent": "HTTPie/1.0.3", "X-Amzn-Trace-Id": "Root=1-61695d9b-4659db2a5dce4bcb486adf55" }, "json": { "name": "egehan", "surname": "gundogdu" }, "origin": "95.70.245.161", "url": "https://httpbin.org/post" }
HTTPie varsayılan olarak veri gönderiminde JSON kullanır. cURL varsayılan olarak form datası göndermektedir.
-f
Form datası gönderimine ihtiyacı için -f flagini geçmek yeterlidir.
Form datası yollamak.
$ http -f post https://httpbin.org/post name=egehan surname=gundogdu
{ "args": {}, "data": "", "files": {}, "form": { "name": "egehan", "surname": "gundogdu" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "28", "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "Host": "httpbin.org", "User-Agent": "HTTPie/1.0.3", "X-Amzn-Trace-Id": "Root=1-61696167-166f985d6ce4ec063e60b6a9" }, "json": null, "origin": "95.70.245.161", "url": "https://httpbin.org/post" }
Put, ve Patch istekleri göndermek.
$ http patch https://httpbin.org/patch is_active=true $ http put https://httpbin.org/put is_active=true
{ "args": {}, "data": "{\"is_active\": \"true\"}", "files": {}, "form": {}, "headers": { "Accept": "application/json, */*", "Accept-Encoding": "gzip, deflate", "Content-Length": "21", "Content-Type": "application/json", "Host": "httpbin.org", "User-Agent": "HTTPie/1.0.3", "X-Amzn-Trace-Id": "Root=1-616b3921-4a9f1ab052ec0cdb769bf878" }, "json": { "is_active": "true" }, "origin": "95.70.245.161", "url": "https://httpbin.org/put" }
Headers kısmına dikkat edecek olursak HTTPie bizim için bir çok ön tanımlı header göndermekte. Custom header gönderimine göz atacak olursak;
Custom Header gönderimi.
HeaderName:"HeaderValue"
istek sonuna yukarıdaki formatla headerları ekleyebiliriz. Örneğin;
$ http get https://httpbin.org/headers Authorization:"Token s1kl3cz4123fsz642" User-Agent:"MyUserAgent"
{ "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Authorization": "Token s1kl3cz4123fsz642", "Host": "httpbin.org", "User-Agent": "MyUserAgent", "X-Amzn-Trace-Id": "Root=1-61696388-56e5cd3e1036871c4d913aa7" } }
Query params.
GET isteklerinde, query params gönderimi için aşağıdaki format kullanılmaktadır.
query_param_1==true query_param_2==false
$ http --body get https://jsonplaceholder.typicode.com/posts _limit==1 is_published==true
[ { "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto", "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "userId": 1 } ]
–body flagi ile cevabın sadece gövdesini,.
–headers flagi ile cevabın header bilgilerini,
–verbose flagi ile hem atılan isteğin hemde cevabın tüm bilgilerini alabilirsiniz.
Redirection.
HTTPie varsayılan olarak redirect işlemlerini takip etmemektedir. Fakat
--follow
flagi ile redirect edilen sayfaları takip etmesini sağlayabilirsiniz.
$ http --follow get https://pie.dev/redirect/1
Örnekte 1 yönlendirmeye sahip bir url takip edilmiştir.
SSL doğrulaması bypass.
Lokal ortamda çalışırken geçersiz SSL sertifkası uyarısını atlatmak için
--verify=no
flagini kullanabilirsiniz.
$ http --verify=no https://self-signed.badssl.com/
Dosya işlemleri.
Bir dosya ya da cevabı indirmek istersek
--download
flagini geçmek yeterli olacaktır.
Örneğin;
$ http --download get https://pie.dev/xml
İndirilen dosyayı farklı bir isimle kayıt etmek istersek;
--download --output custom_name.xml
Eğer indirme işlemi Partial Content 206 cevabını destekleyen bir sunucudan yapılıyorsa, bağlantının kesilip tekrar oluşturulduğu durumlarda
--continue --output
flaglerini birlikte kullanarak indirmeye kaldığınız yerden devam edebilirsiniz. Örn;
$ http --download --continue --output docker.dmg https://desktop.docker.com/mac/stable/arm64/Docker.dmg
HTTP/1.1 200 OK Age: 3776 Connection: keep-alive Content-Length: 585686833 Date: Sat, 16 Oct 2021 21:56:00 GMT ETag: "f85113ddc55d2dd4e22250d9a8e715c9" Last-Modified: Tue, 12 Oct 2021 13:05:31 GMT Server: AmazonS3 Via: 1.1 d7147e532e5cf73689fcb39fa760bcf3.cloudfront.net (CloudFront) X-Amz-Cf-Id: 2KjK5NUQDJIFkytBNrsnR7qZXXGsuAvVUfQsj9dnU4W3nfTEJ5DSQQ== X-Amz-Cf-Pop: ZRH50-C1 X-Cache: Hit from cloudfront x-amz-version-id: .ZjeGpmfH4vKadjAn_oQ_nb6ak9MQGDB Downloading 558.55 MB to "docker.dmg" | 12.31 % 68.73 MB 3.43 MB/s 0:02:22 ETA
Sonuç.
HTTPie gerçekten kullanışlı bir araç. Sizde benim gibi cURL’i fazlasıyla karmaşık buluyor ve flaglerini sürekli unutuyorsanız bir şans vermenizi öneririm.
Bu blog yazısı kapsamında cookie yönetimi, Basic Authentication gibi yöntemlere değinmedik fakat dökümantasyonu buraya linkliyorum.
İyi günler!
İlk Yorumu Siz Yapın