程序员专属微信红包封面1000个,兑换码:dWK7fUs2WQG

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

httpie

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

  • 语法简单
  • 支持格式化输出和彩色样式
  • WindowsLinux、MacOS都支持
  • 同时支持HTTPHTTPS
  • 支持文件上传
  • 支持持续会话保持
  • 内置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显式设置请求Acceptapplication/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

这个命令行HTTP客户端工具真不错的更多相关文章

  1. Linux系统——28个命令行下的工具

    Unix/Linux下的28个命令行下的工具 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具(原文链接),有一些是大家熟悉的,有一些是非常有用的,有一些是不 ...

  2. curl太复杂难用记不住?来试试Httpie一个简单的现代化命令行Http客户端

    HTTPie 是一个简单的现代化命令行 HTTP 客户端. 交互友好,JSON支持,语法高亮,类wget下载,支持拓展等 功能特性 自然而且简单的命令语句 格式化且高亮显示输出内容 内置 JSON 支 ...

  3. APICloud提供适用于命令行的开发工具,开发更具极客精神!

    APICloud近期大动作不断,上周刚刚支持Atom编辑器,并推出核心开发工具库.本周又为开发者提供了一款超轻便的新开发工具--CLI工具! 操作系统: Mac/Windows/Linux nodej ...

  4. VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录

    VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录 一.描述 系统描述:win7旗舰版64位系统+VMware Workst ...

  5. rtorrent - 强大的命令行BT客户端

    NOTE - 文中展示的所有示例和指令都已经在Ubuntu 13.04中测试过. 一.            安装 [root@GY-10000 data]# yum search rtorrent ...

  6. 命令行web客户端与HTTP REST API调试工具

    1.命令行web客户端 curl wget httpie 2.优雅的REST API调试工具 insomnia postman

  7. [Linux] jq:命令行JSON处理工具

    jq命令帮助我们很方便地在终端查看和处理json文件 jq命令的帮助信息: abby@abby:bgs$ jq -h jq - commandline JSON processor [version ...

  8. 命令行视频下载工具 you-get 和 youtube-dl

    you-get 和 youtube-dl 都是基于 Python 的命令行媒体文件下载工具,完全开源免费跨平台.用户只需使用简单命令并提供在线视频的网页地址即可让程序自动进行嗅探.下载.合并.命名和清 ...

  9. PHP 命令行参数解析工具类

    <?php/** * 命令行参数解析工具类 * @author guolinchao * @email luoyecb@163.com */class CommandLine{ // store ...

随机推荐

  1. pycharm遇到的小问题

    1. Pycharm编写的代码出现满屏的波浪线,如何去除>>>点击右下角的小人图标将箭头移到中间syntax处即可. 2. 运行时报错: UserWarning: No parser ...

  2. Java初学者作业——编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级。定义方法实现学生成绩的评测功能。

    返回本章节 返回作业目录 需求说明: 编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级.要求:定义方法实现学生成绩的评测功能. 学生的英语考试成绩进行评测,评测规 ...

  3. 1.spring系列之优雅的实现接口统一返回

    好处 现在公司开发基本上都是以前后分离模式为主,所以要有个统一的数据格式,这样有什么好处呢? 能够提高前后端对接的效率(特别重要) 代码更加优雅和简洁 对于前端和后端维护更方便容易 实现(直接上代码) ...

  4. 【】VMware vSphere中三种磁盘规格的解释说明

    在VMware vSphere中,不管是以前的5.1版本,或者是现在的6.5版本,创建虚拟机时,在创建磁盘时,都会让选择磁盘的置备类型,如下图所示,分为: 厚置备延迟置零 厚置备置零 Thin Pro ...

  5. 在使用jjwt时在配置文件中设置过期时间,取到的结果为0的原因

    在设置了过期时间后感觉没有起作用,打印日志查看了下为0,因为生成token的文件在一个公共模块中,而过期时间设置在服务模块 中的配置文件中. 原因是:没有为设置getter和setter方法 来自为知 ...

  6. Nginx.d 设置

    #vi nginx.conf 最后一行添加 #加载conf.d内文件 include /usr/local/nginx/conf/conf.d/*.conf; 示例 cd  conf.d Vi  ** ...

  7. Java 简单操作hdfs API

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6632047118376780295/ 启动Hadoop出现问题:datanode的clusterID 和 name ...

  8. 下载并搭建maven环境

    1.下载maven 1.在官网下载maven  http://maven.apache.org/download.cgi 2.将下载maven解压.复制路径. 2.搭建maven环境 1.新建M2_H ...

  9. SYCOJ411

    题面描述 MasMas在面试某大厂时遇到了一道有趣的题.面试官要求MasMas写一个程序找出几个数中,出现次数为奇数的那个数.MasMas抓耳挠腮,请你帮帮他. 输入描述 第一行输入一个数nn (1 ...

  10. 品味Spring Cache设计之美

    最近负责教育类产品的架构工作,两位研发同学建议:"团队封装的Redis客户端可否适配Spring Cache,这样加缓存就会方便多了" . 于是边查阅文档边实战,收获颇丰,写这篇文 ...