这个命令行HTTP客户端工具真不错
程序员专属微信红包封面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 获取更多资讯
这个命令行HTTP客户端工具真不错的更多相关文章
- Linux系统——28个命令行下的工具
Unix/Linux下的28个命令行下的工具 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具(原文链接),有一些是大家熟悉的,有一些是非常有用的,有一些是不 ...
- curl太复杂难用记不住?来试试Httpie一个简单的现代化命令行Http客户端
HTTPie 是一个简单的现代化命令行 HTTP 客户端. 交互友好,JSON支持,语法高亮,类wget下载,支持拓展等 功能特性 自然而且简单的命令语句 格式化且高亮显示输出内容 内置 JSON 支 ...
- APICloud提供适用于命令行的开发工具,开发更具极客精神!
APICloud近期大动作不断,上周刚刚支持Atom编辑器,并推出核心开发工具库.本周又为开发者提供了一款超轻便的新开发工具--CLI工具! 操作系统: Mac/Windows/Linux nodej ...
- VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录
VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录 一.描述 系统描述:win7旗舰版64位系统+VMware Workst ...
- rtorrent - 强大的命令行BT客户端
NOTE - 文中展示的所有示例和指令都已经在Ubuntu 13.04中测试过. 一. 安装 [root@GY-10000 data]# yum search rtorrent ...
- 命令行web客户端与HTTP REST API调试工具
1.命令行web客户端 curl wget httpie 2.优雅的REST API调试工具 insomnia postman
- [Linux] jq:命令行JSON处理工具
jq命令帮助我们很方便地在终端查看和处理json文件 jq命令的帮助信息: abby@abby:bgs$ jq -h jq - commandline JSON processor [version ...
- 命令行视频下载工具 you-get 和 youtube-dl
you-get 和 youtube-dl 都是基于 Python 的命令行媒体文件下载工具,完全开源免费跨平台.用户只需使用简单命令并提供在线视频的网页地址即可让程序自动进行嗅探.下载.合并.命名和清 ...
- PHP 命令行参数解析工具类
<?php/** * 命令行参数解析工具类 * @author guolinchao * @email luoyecb@163.com */class CommandLine{ // store ...
随机推荐
- 【LeetCode】472. Concatenated Words 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetc ...
- 【LeetCode】441. Arranging Coins 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 模拟计算 二分查找 数学公式 日期 题目地址:htt ...
- 【LeetCode】787. Cheapest Flights Within K Stops 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:DFS 方法二:BFS 参考资料 日期 题目 ...
- 1144 - Ray Gun
1144 - Ray Gun PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You are ...
- CHARINDEX 用法
CHARINDEX 返回字符串中指定表达式的起始位置. 语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 参数 expre ...
- [多线程]async异步操作的使用实例及不同策略的对比
#include <iostream> #include <thread> #include <mutex> #include <iostream> / ...
- <学习opencv>过滤器和卷积
/*=========================================================================*/ // 过滤器和卷积 /*========== ...
- 2021前端面试css(三)
overflow 原理 块格式化上下文是css可视化渲染的一部分,它是一块区域,规定了内部块盒的渲染方式,以及浮动相互之间的影响关系,当元素设置了overflow 样式且值不为visible时,元素就 ...
- Java初学者作业——编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能。
返回本章节 返回作业目录 需求说明: 编写 Java 程序,定义 Employee 类以及 HR 类,实现 HR 为 Employee 加薪的功能. 实现思路: 定义 Employee 类,并定义属性 ...
- SpringBoot中如何优雅的使用多线程
SpringBoot中如何优雅的使用多线程 当异步方法有返回值时,如何获取异步方法执行的返回结果呢?这时需要异步调用的方法带有返回值CompletableFuture