HTTPie 简介

HTTPie(发音 aitch-tee-tee-pie)是一个命令行 HTTP 客户端。它的目的是使 CLI 和网络服务之间的交互尽可能人性化。它提供了一个简单的 http 命令,允许使用简单自然的语法发送任意 HTTP 请求,并显示多彩输出。HTTPie 可用于测试,调试以及通常与 HTTP 服务器交互。

开始使用

HTTPie 的安装,访问官网 httpie.org 教程。

Hello World:

http httpie.org

基础语法:

http [flags] [METHOD] URL [ITEM [ITEM]]

使用举例

HTTPie 支持自定义 HTTP method, HTTP 请求头和发送请求数据,文件下载等:

http PUT example.com X-API-Token:123 name=John

提交表单数据:

http -f POST example.org hello=World

查看请求并使用输出选项参数:

http -v example.com

通过身份验证使用 Github API 提交一个 issue 评论:

http -a USERNAME POST https://api.github.com/repos/jakubroztocil/httpie/issues/83/comments body='HTTPie is awesome! :heart:'

使用重定向输入上传文件:

http example.org < file.json

通过重定向输出下载文件:

http example.org/file > file

也可以使用 wget 风格下载文件:

http --download example.org/file

设置自定义 Host 请求头防止丢失 DNS 记录:

http localhost:8000 Host:example.com

HTTP method

HTTP 请求方法的名称在命令的后面,URL 参数的前面:

http DELETE example.org/todos/7

当从命令行中删除 METHOD 参数时,HTTPie 设置默认值为 GET(没有请求体时)或者 POET(有请求体时)。

HTTP 请求方法有:GET, POST, HEAD, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH

关于 HTTP method,详见 MDN 的介绍。

HTTP 请求头

为了设置请求头你可以使用 Header:Value 标记:

http example.org  User-Agent:Bacon/1.0 'Cookie:valued-visitor=yes;foo=bar' \
    X-Foo:Bar Referer:http://httpie.org/

上面的命令结果是:

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Cookie: valued-visitor=yes;foo=bar
Host: example.org
Referer: http://httpie.org/
User-Agent: Bacon/1.0
X-Foo: Bar

HTTPie 默认设置的请求头

HTTPie 设置的默认请求头,它们是一些值对:

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: HTTPie/<version>
Host: <taken-from-URL>

除了 Host 以外的任何一个都可以重写覆盖,也可以取消设置。

空请求头和取消设置请求头

想要取消上面默认指定的请求头,可以使用 Header:

http httpbin.org/headers Accept: User-Agent:

也可以使用 Header: 来发送一个空值请求头:

http httpbin.org/headers 'Header;'

Cookies

HTTPie 使用通常的 Header:Value 来设置 HTTP 客户端发送到服务器的 cookies:

发送单个 cookie:

http example.org Cookie:sessionid=foo

对应的 HTTP 请求:

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: sessionid=foo
Host: example.org
User-Agent: HTTPie/0.9.9

发送多个 cookies 值时,cookies 需要使用引号包裹并以 ; 分号分隔的值对:

http example.org 'Cookie:sessionid=foo;another-cookie=bar'

HTTP 请求将是:

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: sessionid=foo;another-cookie=bar
Host: example.org
User-Agent: HTTPie/0.9.9

HTTPS

随着互联网对安全和隐私越来越重视,越来越多的网站开启了 HTTPS 访问。HTTPie 支持开启 HTTPS 请求。

服务端 SSL 证书认证

HTTPie 在请求 HTTPS 网站时默认开启服务器 SSL 证书认证。如果您想关闭,可以通过设置 --verify=no(默认值是 yes):

http --verify=no https://example.com

自定义 CA 捆绑包

可以通过设置 --verify=<CA_BUNDLE_PATH> 来自定义 HTTPS CA 包:

http --verify=/ssl/custom_ca_bundle https://example.com

客户端 SSL 证书

通过 --cert 参数传递 cert 文件在客户端完成 SSL 通信:

http --cert=client.pem https://example.com

同时可以使用 --cert-key 参数传递密钥文件:

http --cert=client.crt --cert-key=client.key https://example.com

自定义 SSL 版本

HTTPie 默认使用的 SSL 版本是 v2.3,使用 --ssl=<PROTOCOL> 参数指定要使用的版本。可接受的版本有 ssl2.3, ssl3, tls1, tls1.1, tls1.2, tls1.3

# 指定 SSL3 协议与服务器通信:
http --ssl=ssl3 https://vulnerable.example.com

更多 HTTPie 特色

HTTPie 提供了丰富的命令行发送 HTTP 请求,并在此基础上提高交互的人性化。相比 curl 压缩文字的输出,HTTPie 多彩且格式清晰的终端输出,阅读性和交互性更优秀。

  • 富有表现力和直观的语法
  • 格式化并多色彩的终端输出
  • 内置 JSON 支持
  • 支持表单和文件上传
  • HTTPS,代理和身份验证
  • 任意请求数据
  • 自定义请求头
  • 持久的 sessions 保持
  • 类似 Wget 的下载
  • 支持 Python 2.7 和 3.x
  • 支持 Linux,macOS 和 Windows
  • 丰富的插件
  • 易读的文档
  • 充分的测试

更多关于 HTTPie,可以访问 httpie.org 了解。