程序员专属微信红包封面 1000 个,兑换码:dWK7fUs2WQG![]()
cURL置信很多做开发的、运维的都不生疏,是十分有用的一个终端申请工具,借助于它能够在命令行中进行 HTTP、FTP 等申请,在 Linux 零碎中利用十分宽泛。然而它目前有一个缺点,语法简单,上手难度挺高的,甚至目前还不间接反对 JSON 参数申请。胖哥最近发现了另一个相似的工具 httpie,一个非常简单的HTTP 命令行客户端,甚至有点酷炫。
httpie
httpie是用 Python 写的,反对的操作系统十分全面,上手十分快,胖哥看了 5 分钟就能上手应用了。依据官网形容它的次要特点有:
- 语法简略
- 反对格式化输入和黑白款式
- Windows、Linux、MacOS 都反对
- 同时反对 HTTP 和HTTPS
- 反对文件上传
- 反对继续会话放弃
- 内置 JSON 反对,反对相似 Wget 下载
- 反对插件
VS cURL
既然用来对标cURL,咱们来直观地看看它们之间的差别
同一个的申请,cURL的参数项要多一些而且不能直观了解,而 httpie 要人性化的多。
装置
装置形式这里介绍四种。
PyPI
忽视平台,只有有 Python3.7+ 环境即可。
# 装置
pip install httpie
Windows
用以前胖哥举荐装置的包管理器 Chocolatey 装置。
# 装置
choco install httpie
# 降级版本
choco upgrade httpie
MacOS
苹果上应该没有开发者不装 Homebrew 的吧?
brew update
# 装置
brew install httpie
# 降级版本
brew upgrade httpie
Linux
Linux可就多了,咱们罕用的 Debian 系,如Ubuntu
apt update
# 装置
apt install httpie
# 降级版本
apt upgrade httpie
如果是红帽系的话,天然是用yum:
yum install epel-release
# 装置
yum install httpie
# 降级版本
yum upgrade httpie
当然 Fedora 也可能有人喜爱用,用 dnf
命令试试,我不太确定。
用法
httpie用法很简略,简略到我懒得具体写阐明,然而还是得写一下。先来试试 Hello World:
httpie命令的格局为:
https|http [flags] [METHOD] URL [ITEM [ITEM]]
具体能够通过 http --help
查问细节。
申请办法
httpie的申请办法(http method)是可选的,httpie会自行判断。
http pie.dev/get
除非你显式申明:
http POST pie.dev/get
而上面这个办法会被认为是 POST 申请:
http pie.dev/post hello=world
因为 hello=world
会被认为是申请体。那咋才认为是 GET
呢?
即便显式申明为 GET 也不行 ! ** 正确的做法是把=
替换为==
。
查问字符串参数
为什么要 =
替换为==
?
https://api.github.com/search/repositories?q=httpie&per_page=1
下面是一个规范的 API 格局,在 httpie 中 ?
和&
都被空格替换,参数也不须要 URL 本义,query 参数键值对应用==
;申请体参数键值对应用=
。变为:
http https://api.github.com/search/repositories q==httpie per_page==1
用文件固定参数
有些配置项,比方 JWT Token,老长老长了,而且我还想复用咋办?写文件里,而后用 @
符号加门路来援用文件里的值:
http POST pie.dev/post \
Authentication:@files/jwt.txt # 从文件里读取申请头
token==@files/text.txt # 从文件读取 query 参数
name=@files/text.txt # 申请体参数
bookmarks:=@files/data.json # 从文件中嵌入申请体 json 数据
这种形式我感觉把一些配置动态化了,改文件里的值就能够了。
申请头用的
:
。
JSON
应用 --json, -j
显式设置申请 Accept
为application/json
,这个时候 =
连贯的键值对会被转为json
。
http -j PUT pie.dev/put name=felord age=18
验证一下:
-v
是--verbose
的缩写,能够打印申请细节。
如果不应用 -j
的话,就须要应用 :=
来分隔键值对了,如果有文件援用还要加上@
。
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
理论申请体 JSON 为:
{
"age": 29,
"bookmarks": {
"httpie": {"says": "Hello, World!"}
},
"description": "Hello, World!\n",
"favorite": {"tool": "HTTPie"},
"hobbies": [
"http",
"pies"
],
"married": false,
"name": "John"
}
这时候
=
和:=
是一样的。
嵌套
嵌套的格局也挺好了解的。我感觉不须要过多形容,看上面的图就能明确。
一些技巧
只须要上面这种形式就能够快捷申请
# https://baidu.com
https ://baidu.com
如果是localhost
,能够简化为:
# https://localhost:8080/yourapi
https :8080/yourapi
上传下载:
http POST example.com/upload < ~/upload.pdf
http GET example.com/download.pdf > ~/download.pdf
# form 上传
http -f POST example.com/form-with-file myUpload@~/example.pdf
另外
另外还有代理、插件等高级玩法,可玩性十分强,须要本人去摸索摸索,基于篇幅就不在赘述了。httpie其实还有 UI 客户端,只不过目前在 β 测试阶段,没凋谢申请。
关注公众号:Felordcn 获取更多资讯
集体博客:https://felord.cn