HTTPie 工具是现代的 HTTP 命令行客户端,它能通过命令行界面与 Web 服务进行交互。

-- Magesh Maruthamuthu

大多数时间我们会使用 curl 命令或是 wget 命令下载文件或者做其他事。

我们以前曾写过 最佳命令行下载管理器 的文章。你可以点击相应的 URL 连接来浏览这些文章。

  • aria2 – Linux 下的多协议命令行下载工具
  • Axel – Linux 下的轻量级命令行下载加速器
  • Wget – Linux 下的标准命令行下载工具
  • curl – Linux 下的实用的命令行下载工具

今天我们将讨论同样的话题。这个实用程序名为 HTTPie。

它是现代命令行 http 客户端,也是 curl 和 wget 命令的最佳替代品。

什么是 HTTPie?

HTTPie (发音是 aitch-tee-tee-pie) 是一个 HTTP 命令行客户端。

HTTPie 工具是现代的 HTTP 命令行客户端,它能通过命令行界面与 Web 服务进行交互。

它提供一个简单的 http 命令,允许使用简单而自然的语法发送任意的 HTTP 请求,并会显示彩色的输出。

HTTPie 能用于测试、调试及与 HTTP 服务器交互。

主要特点

  • 具表达力的和直观语法
  • 格式化的及彩色化的终端输出
  • 内置 JSON 支持
  • 表单和文件上传
  • HTTPS、代理和认证
  • 任意请求数据
  • 自定义头部
  • 持久化会话
  • 类似 wget 的下载
  • 支持 Python 2.7 和 3.x

在 Linux 下如何安装 HTTPie

大部分 Linux 发行版都提供了系统包管理器,可以用它来安装。

Fedora 系统,使用 DNF 命令 来安装 httpie:

$ sudo dnf install httpie

Debian/Ubuntu 系统,使用 APT-GET 命令 或 APT 命令 来安装 HTTPie。

$ sudo apt install httpie

基于 Arch Linux 的系统,使用 Pacman 命令 来安装 HTTPie。

$ sudo pacman -S httpie

RHEL/CentOS 的系统,使用 YUM 命令 来安装 HTTPie。

$ sudo yum install httpie

openSUSE Leap 系统,使用 Zypper 命令 来安装 HTTPie。

$ sudo zypper install httpie

用法

如何使用 HTTPie 请求 URL?

HTTPie 的基本用法是将网站的 URL 作为参数。

# http 2daygeek.com

HTTP/1.1 301 Moved Permanently

CF-RAY: 4c4a618d0c02ce6d-LHR

Cache-Control: max-age=3600

Connection: keep-alive

Date: Tue, 09 Apr 2019 06:21:28 GMT

Expires: Tue, 09 Apr 2019 07:21:28 GMT

Location: https://2daygeek.com/

Server: cloudflare

Transfer-Encoding: chunked

Vary: Accept-Encoding

如何使用 HTTPie 下载文件

你可以使用带 --download 参数的 HTTPie 命令下载文件。类似于 wget 命令。

# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png

HTTP/1.1 200 OK

Accept-Ranges: bytes

CF-Cache-Status: HIT

CF-RAY: 4c4a65d5ca360a66-LHR

Cache-Control: public, max-age=7200

Connection: keep-alive

Content-Length: 32066

Content-Type: image/png

Date: Tue, 09 Apr 2019 06:24:23 GMT

Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"

Expires: Tue, 09 Apr 2019 08:24:23 GMT

Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT

Server: cloudflare

Set-Cookie: __cfduid=dd2034b2f95ae42047e082f59f2b964f71554791063; expires=Wed, 08-Apr-20 06:24:23 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure

Vary: Accept-Encoding

Downloading 31.31 kB to "Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png"

Done. 31.31 kB in 0.01187s (2.58 MB/s)

你还可以使用 -o 参数用不同的名称保存输出文件。

# http --download https://www.2daygeek.com/wp-content/uploads/2019/04/Anbox-Easy-Way-To-Run-Android-Apps-On-Linux.png -o Anbox-1.png

HTTP/1.1 200 OK

Accept-Ranges: bytes

CF-Cache-Status: HIT

CF-RAY: 4c4a68194daa0a66-LHR

Cache-Control: public, max-age=7200

Connection: keep-alive

Content-Length: 32066

Content-Type: image/png

Date: Tue, 09 Apr 2019 06:25:56 GMT

Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"

Expires: Tue, 09 Apr 2019 08:25:56 GMT

Last-Modified: Mon, 08 Apr 2019 04:54:25 GMT

Server: cloudflare

Set-Cookie: __cfduid=d3eea753081690f9a2d36495a74407dd71554791156; expires=Wed, 08-Apr-20 06:25:56 GMT; path=/; domain=.2daygeek.com; HttpOnly; Secure

Vary: Accept-Encoding

Downloading 31.31 kB to "Anbox-1.png"

Done. 31.31 kB in 0.01551s (1.97 MB/s)

如何使用 HTTPie 恢复部分下载?

你可以使用带 -c 参数的 HTTPie 继续下载。

# http --download --continue https://speed.hetzner.de/100MB.bin -o 100MB.bin

HTTP/1.1 206 Partial Content

Connection: keep-alive

Content-Length: 100442112

Content-Range: bytes 4415488-104857599/104857600

Content-Type: application/octet-stream

Date: Tue, 09 Apr 2019 06:32:52 GMT

ETag: "5253f0fd-6400000"

Last-Modified: Tue, 08 Oct 2013 11:48:13 GMT

Server: nginx

Strict-Transport-Security: max-age=15768000; includeSubDomains

Downloading 100.00 MB to "100MB.bin"

| 24.14 % 24.14 MB 1.12 MB/s 0:01:07 ETA^C

你根据下面的输出验证是否同一个文件:

[email protected]:/var/log# ls -lhtr 100MB.bin

-rw-r--r-- 1 root root 25M Apr 9 01:33 100MB.bin

如何使用 HTTPie 上传文件?

你可以通过使用带有小于号 < 的 HTTPie 命令上传文件

$ http https://transfer.sh < Anbox-1.png

如何使用带有重定向符号 > 下载文件?

你可以使用带有重定向 > 符号的 HTTPie 命令下载文件。

# http https://www.2daygeek.com/wp-content/uploads/2019/03/How-To-Install-And-Enable-Flatpak-Support-On-Linux-1.png > Flatpak.png

# ls -ltrh Flatpak.png

-rw-r--r-- 1 root root 47K Apr 9 01:44 Flatpak.png

发送一个 HTTP GET 请求?

您可以在请求中发送 HTTP GET 方法。GET 方法会使用给定的 URI,从给定服务器检索信息。

# http GET httpie.org

HTTP/1.1 301 Moved Permanently

CF-RAY: 4c4a83a3f90dcbe6-SIN

Cache-Control: max-age=3600

Connection: keep-alive

Date: Tue, 09 Apr 2019 06:44:44 GMT

Expires: Tue, 09 Apr 2019 07:44:44 GMT

Location: https://httpie.org/

Server: cloudflare

Transfer-Encoding: chunked

Vary: Accept-Encoding

提交表单?

使用以下格式提交表单。POST 请求用于向服务器发送数据,例如客户信息、文件上传等。要使用 HTML 表单。

# http -f POST Ubuntu18.2daygeek.com hello='World'

HTTP/1.1 200 OK

Accept-Ranges: bytes

Connection: Keep-Alive

Content-Encoding: gzip

Content-Length: 3138

Content-Type: text/html

Date: Tue, 09 Apr 2019 06:48:12 GMT

ETag: "2aa6-5844bf1b047fc-gzip"

Keep-Alive: timeout=5, max=100

Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT

Server: Apache/2.4.29 (Ubuntu)

Vary: Accept-Encoding

运行下面的指令以查看正在发送的请求。

# http -v Ubuntu18.2daygeek.com

GET / HTTP/1.1

Accept: */*

Accept-Encoding: gzip, deflate

Connection: keep-alive

Host: ubuntu18.2daygeek.com

User-Agent: HTTPie/0.9.8

hello=World

HTTP/1.1 200 OK

Accept-Ranges: bytes

Connection: Keep-Alive

Content-Encoding: gzip

Content-Length: 3138

Content-Type: text/html

Date: Tue, 09 Apr 2019 06:48:30 GMT

ETag: "2aa6-5844bf1b047fc-gzip"

Keep-Alive: timeout=5, max=100

Last-Modified: Sun, 17 Mar 2019 15:29:55 GMT

Server: Apache/2.4.29 (Ubuntu)

Vary: Accept-Encoding

HTTP 认证?

当前支持的身份验证认证方案是基本认证(Basic)和摘要验证(Digest)。

基本认证:

$ http -a username:password example.org

摘要验证:

$ http -A digest -a username:password example.org

提示输入密码:

$ http -a username example.org

HTTPie:替代 Curl 和 Wget 的现代 HTTP 命令行客户端的更多相关文章

  1. HTTPie:一个不错的 HTTP 命令行客户端

    转自:http://top.jobbole.com/9682/ HTTPie:一个不错的 HTTP 命令行客户端 HTTPie (读aych-tee-tee-pie)是一个 HTTP 的命令行客户端. ...

  2. 人性化的HTTP命令行工具——HTTPie

    Httpie 是什么 Httpie (aych-tee-tee-pie)是一个 HTTP 的命令行客户端.其目标是让 CLI 和 web 服务之间的交互尽可能的人性化.你可以用它很方便的用 http ...

  3. curl及wget使用说明

    Date: 2019-06-19 Author: Sun 1. curl的使用 注意:安装的时候可能会遇到报错,有可能是openssl没装, apt install curl apt install ...

  4. curl 与wget的区别

    CURL与wget的区别 当想要直接通过linux 命令行下载文件,马上就能想到两个工具:wget 和 CURL.它们有很多一样的特征,可以很轻易的完成一些相同的任务,虽然它们有一些相似的特征,但它们 ...

  5. cURL(wget)—— 测试 RESTful 接口及模拟 GET/POST/PUT/DELETE/OPTIONS 请求

    cURL 是一个简单的 http 命令行工具.与最优秀的 Unix 工具一样,在设计之时,cURL 是个小型程序,功能十分专一,而且是故意为之,仅用于访问 http 服务器.(在 Linux 中,可以 ...

  6. 使用curl在命令行中下载文件

    http://m.blog.csdn.net/blog/mayadong7349/7019208 使用curl在命令行中下载文件 linux下curl简单应用详解 http://blog.sina.c ...

  7. Network - curl和Wget

    curl - transfer a URL curl SYNOPSIS curl [options] [URL...] DESCRIPTION curl is a tool to transfer d ...

  8. linux包-下载-curl与wget

    [root@localhost ~]# rpm -qa|grep curllibcurl-7.19.7-37.el6_4.x86_64python-pycurl-7.19.0-8.el6.x86_64 ...

  9. curl与wget区别

    1.curl是libcurl这个库支持的,wget是一个纯粹的命令行命令.2.curl支持更多的协议.curl supports FTP, FTPS, HTTP, HTTPS, SCP, SFTP, ...

随机推荐

  1. iOS 响应链

    一.UIResponder app 使用响应者对象接收和处理事件,只有继承 UIResponder 的类,才能处理事件. UIApplication.UIView.UIViewController 都 ...

  2. 《Flutter 动画系列》组合动画

    老孟导读:在前面的文章中介绍了 <Flutter 动画系列>25种动画组件超全总结 http://laomengit.com/flutter/module/animated_1/ < ...

  3. TCP漫谈之keepalive和time_wait

    TCP是一个有状态通讯协议,所谓的有状态是指通信过程中通信的双方各自维护连接的状态. 一.TCP keepalive 先简单回顾一下TCP连接建立和断开的整个过程.(这里主要考虑主流程,关于丢包.拥塞 ...

  4. Rust入坑指南:万物初始

    有没有同学记得我们一起挖了多少个坑?嗯-其实我自己也不记得了,今天我们再来挖一个特殊的坑,这个坑可以说是挖到根源了--元编程. 元编程是编程领域的一个重要概念,它允许程序将代码作为数据,在运行时对代码 ...

  5. mysql慢查询分析工具比较与实战

    00 前言 在进行mysql性能优化的时候,第一个想到的便是查看慢sql. 但是对于慢sql有没有什么好的工具进行分析呢? 推荐两个工具mysqldumpslow及pt-query-digest. m ...

  6. 新建基于STM32F103ZET6的工程-寄存器版本

    1.新建空白工程 新建一个文件夹,用来存放新建的工程文件.在这个新建的文件夹下创建MDK-PRO和OUTPUT两个子文件夹.MDK-PRO文件夹用来存放工程文件:OUTPUT用来存放工程编译器后输出的 ...

  7. CentOS 6.5系统实现NFS文件共享

    一台Linux server ip 192.168.1.254,一台Linux client ip 192.168.1.100操作系统:CentOS 6.5需求描述:1:将/root 共享给192.1 ...

  8. 二维码,QR码,编码原理与实现

    文章更新于:2020-02-18 注:开头是四篇文章的链接,下面是这四篇文章的截图 # 想了解二维码,读这几篇就够了 # 二维码的基础原理是什么 https://cli.im/news/help/10 ...

  9. 修复Windows10引导,适用gpt+uefi环境

    在双硬盘多系统安装时,容易损坏Win10的开机引导文件. 可以尝试用Windows原版安装盘启动,进入命令提示符模式: 首先使用diskpart命令确认需要修复的Windows分区的安装卷X:. 再运 ...

  10. (js描述的)数据结构[树结构1.2](12)

    1.先序遍历 2.中序遍历 3.后序遍历 4.递归调用栈详解: 详细见: https://zhuanlan.zhihu.com/p/24291978 5.删除节点操作分析: 5.代码封装 //封装二叉 ...