İçeriğe geç

HTTPie, Komut Satırı HTTP İstemcisi

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!

 

Tarih:Blog

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Göster
Gizle