httpie
介绍
httpie 提供了和 curl 类似的功能,可以作为 curl 的上位替代品,尤其在 json 数据的拼接上, httpie 比 curl 优秀太多了
是时候跟 curl 说再见了
使用
brew update
brew install httpie
在使用时,需要用
http
或者https
关键字,而不是 httpie
在 httpie 中, get
和 post
关键字是可以缺省的,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"
]
}
}