程序员专属微信红包封面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. java源码——对文件内容的查找和替换(开始写界面咯)

    问题是:"键盘输入文件的路径.查找内容和替换内容,对指定路径的文件的内容进行查找和替换." 好久没写界面了,今天熟悉一下界面的书写和监听器操作. 这个问题的本身不是很难,重点应该是 ...

  2. 1036 - A Refining Company

    1036 - A Refining Company   PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 32 ...

  3. CHARINDEX 用法

    CHARINDEX 返回字符串中指定表达式的起始位置. 语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 参数 expre ...

  4. 线程 IO流 网络编程 基础总结

    线程 进程---->进行中的程序 线程---->由进程创建 一个进程可以创建多个线程 并发:同一个时刻 多个任务交替执行 造成一种貌似同时进行的错觉 简单来说 单个cpu的多任务就是并发 ...

  5. 1.SpringCloud与Dubbo的区别

    1.SpringCloud与Dubbo的区别 初始定位不同: SpringCloud定位为微服务架构下的一站式解决方案:Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用和治理 生态环境 ...

  6. v75.01 鸿蒙内核源码分析(远程登录篇) | 内核如何接待远方的客人 | 百篇博客分析OpenHarmony源码

    子曰:"不学礼,无以立 ; 不学诗,无以言 " <论语>:季氏篇 百篇博客分析.本篇为: (远程登录篇) | 内核如何接待远方的客人 设备驱动相关篇为: v67.03 ...

  7. Linux时间与日期

    date date:显示当前时间[年月日时分秒] date +%[选项] Y:年 m:月 d:日 H:时 M:分 S:秒 date "+%Y-%m-%d":格式化显示,格式可自定. ...

  8. Mybatis的联合查询

    数据库表结构 department employee 要求一 现在的要求是输入 id 把 employee 表的对应员工数据查询出来,并且查询出该员工的所处部门信息 JavaBean public c ...

  9. Java访问Elasticsearch报错Request cannot be executed; I/O reactor status: STOPPED

    简介 使用ES过程中遇到一个Request cannot be executed; I/O reactor status: STOPPED 的异常,大概意思是和server端的连接异常终止了.开始以为 ...

  10. Eclipse提速优化方法

    Eclipse提速优化方法 Eclipse运行太慢了,尤其是导入大型maven项目的时候经常动不动就down掉,于是总结了一下Eclipse提速的方法. 1.关闭不常用的工程 打开的项目太多,会严重影 ...