0
点赞
收藏
分享

微信扫一扫

内有红包封面| 这个命令行HTTP工具好用而且漂亮

七公子706 2022-04-06 阅读 9


cURL​相信很多做开发的、运维的都不陌生,是非常有用的一个终端请求工具,借助于它可以在命令行中进行​HTTP​、​FTP​等请求,在​Linux​系统中应用非常广泛。但是它目前有一个缺陷,语法复杂,上手难度挺高,甚至目前还不直接支持​JSON​参数请求。胖哥最近发现了另一个类似的工具​httpie​,非常简单的一个​HTTP​命令行客户端,甚至有点酷炫。

httpie

httpie​是用​Python​写的,支持的操作系统非常全面,上手非常快,胖哥看了5分钟就能上手使用了。根据官方描述它的主要特点有:

  • 语法简单

  • 支持格式化输出和彩色样式

  • Windows​、​Linux​、MacOS都支持

  • 同时支持​HTTP​和​HTTPS

  • 支持文件上传

  • 支持持续会话保持

  • 内置​JSON​支持,支持类似​Wget​下载

  • 支持插件

VS cURL

既然用来对标​cURL​,我们来直观地看看它们之间的差异

内有红包封面| 这个命令行HTTP工具好用而且漂亮_post

HTTPie VS 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:

内有红包封面| 这个命令行HTTP工具好用而且漂亮_python_02

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

验证一下:

内有红包封面| 这个命令行HTTP工具好用而且漂亮_restful_03

​-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"
}

这时候​​=​​​和​​:=​​是一样的。


嵌套

嵌套的格式也挺好理解的。

内有红包封面| 这个命令行HTTP工具好用而且漂亮_linux_04

一些技巧

只需要下面这种方式就可以快捷请求

# 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客户端,只不过目前在β测试阶段,没开放申请。


举报

相关推荐

0 条评论