httpie

介绍

httpie 提供了和 curl 类似的功能,可以作为 curl 的上位替代品,尤其在 json 数据的拼接上, httpie 比 curl 优秀太多了

是时候跟 curl 说再见了

使用

brew update
brew install httpie

在使用时,需要用 http 或者 https 关键字,而不是 httpie

在 httpie 中, getpost 关键字是可以缺省的,httpie 会自行判断使用哪个,同时也可以自己指定方法

# 显示声明 GET 方法
http GET pie.dev/get
# 缺省 GET 方法
http pie.dev/get
# 显示声明 POST 方法
http POST pie.dev/post hello=world
# 缺省 POST 方法
http pie.dev/post hello=world

与 curl 不同的是,httpie 提供了一个 --offline 的选项,用于 Debug,该功能非常实用

~ $ http --offline pie.dev/post hello=offline
POST /post HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 20
Content-Type: application/json
Host: pie.dev
User-Agent: HTTPie/3.2.1

{
    "hello": "offline"
}

日常使用中,对于 POST 请求中,填充的 json 数据,使用 curl 拼接时,非常蛋疼,httpie 非常好的解决了这个痛点

http PUT pie.dev/put \
    name=John \                        # String (default)
    age:=29 \                          # Raw JSON — Number
    married:=false \                   # Raw JSON — Boolean
    hobbies:='["http", "pies"]' \      # Raw JSON — Array
    favorite:='{"tool": "HTTPie"}' \   # Raw JSON — Object
    bookmarks:=@files/data.json \      # Embed JSON file
    description=@files/text.txt        # Embed text file

通过使用 --offline 参数,我们可以清晰的看到此时发送的请求如下

PUT /person/1 HTTP/1.1
Accept: application/json, */*;q=0.5
Content-Type: application/json
Host: pie.dev

{
    "age": 29,
    "hobbies": [
        "http",
        "pies"
    ],
    "description": "John is a nice guy who likes pies.",
    "married": false,
    "name": "John",
    "favorite": {
        "tool": "HTTPie"
    },
    "bookmarks": {
        "HTTPie": "https://httpie.org",
    }
}

在面对复杂的类型时,写法也非常符合直觉

http pie.dev/post \
  platform[name]=HTTPie \
  platform[about][mission]='Make APIs simple and intuitive' \
  platform[about][homepage]=httpie.io \
  platform[about][homepage]=httpie.io \
  platform[about][stars]:=54000 \
  platform[apps][]=Terminal \
  platform[apps][]=Desktop \
  platform[apps][]=Web \
  platform[apps][]=Mobile

此时的结果就变成了

{
    "platform": {
        "name": "HTTPie",
        "about": {
            "mission": "Make APIs simple and intuitive",
            "homepage": "httpie.io",
            "stars": 54000
        },
        "apps": [
            "Terminal",
            "Desktop",
            "Web",
            "Mobile"
        ]
    }
}

参考

  1. httpie 地址