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

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

147fe5ccda1690813b51068894467f02.gif

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

httpie

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

  • 语法简单

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

  • WindowsLinux、MacOS都支持

  • 同时支持HTTPHTTPS

  • 支持文件上传

  • 支持持续会话保持

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

  • 支持插件

VS cURL

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

27325be5b6f02d04d09a3273e6028912.png HTTPie VS cURL

同一个的请求,cURL的参数项要多一些而且不能直观理解,而httpie要人性化得多。

安装

安装方式这里介绍四种。

PyPI

和平台无关,只要有Python3.7+环境即可。


   
  1. # 安装
  2. pip install httpie

Windows

用以前胖哥推荐安装的包管理器Chocolatey安装。


   
  1. # 安装
  2. choco install httpie
  3. # 升级版本
  4. choco upgrade httpie

MacOS

苹果上应该没有开发者不装Homebrew的吧?


   
  1. brew update
  2. # 安装
  3. brew install httpie
  4. # 升级版本
  5. brew upgrade httpie

Linux

Linux可就多了,我们常用的Debian系,如Ubuntu


   
  1. apt update
  2. # 安装
  3. apt install httpie
  4. # 升级版本
  5. apt upgrade httpie

如果是红帽系的话,自然是用yum


   
  1. yum install epel-release
  2. # 安装
  3. yum install httpie
  4. # 升级版本
  5. yum upgrade httpie

当然Fedora也可能有人喜欢用,用dnf命令试试,我不太确定。

用法

httpie用法很简单,简单到我懒得详细写说明,但是还是得写一下。先来试试Hello World:

e03ddea81c5c7cefd433d62ed299ab82.png

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,老长老长了,而且我还想复用咋办?写文件里,然后用@符号加路径来引用文件里的值:


   
  1. http POST pie.dev/post \
  2.     Authentication:@files/jwt.txt      # 从文件里读取请求头
  3.     token==@files/text.txt             # 从文件读取query参数  
  4.     name=@files/text.txt               # 请求体参数
  5.     bookmarks:=@files/data.json        # 从文件中嵌入请求体json数据

这种方式我觉得把一些配置动态化了,改文件里的值就可以了。

请求头用的:

JSON

使用--json, -j显式设置请求Acceptapplication/json,这个时候=连接的键值对会被转为json

http -j PUT pie.dev/put name=felord age=18
  

验证一下:

87bb6f079e21215a84c396140d7c8acd.png

-v--verbose 的缩写,可以打印请求细节。

如果不使用-j的话, 就需要使用:=来分隔键值对了,如果有文件引用还要加上@


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

实际请求体JSON为:


   
  1. {
  2.     "age"29,
  3.     "bookmarks": {
  4.         "httpie": {
  5.             "says""Hello, World!"
  6.         }
  7.     },
  8.     "description""Hello, World!\n",
  9.     "favorite": {
  10.         "tool""HTTPie"
  11.     },
  12.     "hobbies": [
  13.         "http",
  14.         "pies"
  15.     ],
  16.     "married"false,
  17.     "name""John"
  18. }

这时候=:=是一样的。

嵌套

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

378db5d1dedb890dc8b8ef0c54fc10f5.png

一些技巧

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


   
  1. # https://baidu.com
  2. https ://baidu.com

如果是localhost,可以简化为:


   
  1. # https://localhost:8080/yourapi
  2. https :8080/yourapi

上传下载:


   
  1. http POST example.com/upload < ~/upload.pdf
  2. http GET example.com/download.pdf > ~/download.pdf
  3. # form 上传
  4. http -f POST example.com/form-with-file  myUpload@~/example.pdf

可玩性非常强,需要自己去摸索摸索。

另外

httpie还有UI客户端,只不过目前在β测试阶段,没开放申请。

如果抢完了请通过关注视频号: 码农小胖哥 然后私信索要。

内有红包封面|Spring Security的新接口AuthorizationManager

2022-01-25

6f9ce5b65e37dbcfd5f2bd785ffa855c.png

20000个程序员红包封面胖哥已经设计好了

2022-01-25

84eb50deea8187ef946bc247efcb6532.png

欢迎加入胖哥技术内卷群

2022-01-25

92837602c7f6a2439e074bccac5e3eba.png

a3d6f08c7192f4dad55164a33048a34f.gif

文章来源: felord.blog.csdn.net,作者:码农小胖哥,版权归原作者所有,如需转载,请联系作者。

原文链接:felord.blog.csdn.net/article/details/122711091

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。