cURL 和 httpie 常用命令速查表

Published at 2024-12-03
Updated at 2024-12-08
Language not supported Licensed under CC BY-NC-SA 4.0 cheat-sheetcurlhttpieterminaltool

cURL 是一个历史悠久、功能强大的发送和接受数据的工具,而 httpie 是一个更加现代化的 HTTP 客户端,提供了更加人性化的命令行体验。本文记录了 cURL 和 httpie 的常用命令和选项,带您快速上手。

cURL

curl 取自 Client for URLs,是一个命令行工具,支持以包括 HTTP、HTTPS、FTP、SCP 在内的超多种协议进行数据传输。

最简单的用法如下,它将向指定 URL 发送一个 GET 请求,并将结果输出到标准输出(stdout):

curl URL

使用 -v--verbose 选项可以显示请求和响应的详细信息:

curl -v URL

使用 -V--version 选项可以显示 cURL 的版本信息:

curl -V

保存为文件

使用 -o--output 选项并指定文件名,可以将结果保存到文件:

curl -o FILENAME URL

如果希望使用服务器返回的文件名,可以使用 -O--remote-name 选项:

curl -O URL

请求方法、请求头与请求体

使用 -X--request 选项指定请求方法,并使用 -d--data 选项指定请求体:

curl -X POST -d 'key1=value1&key2=value2' URL

在使用 -d 的情况下,cURL 默认发送 POST 请求,所以 -X POST 可以省略。默认的 Content Type 是 application/x-www-form-urlencoded,如果需要发送 JSON 数据,可以使用 -H--header 选项:

curl -d '{"key1":"value1"}' -H 'Content-Type: application/json' URL

可以使用 -I--head 选项来仅显示响应头,这实际上是发送了一个 HEAD 请求(-X HEAD):

curl -I URL

curl 中的跟随重定向

使用 -L--location 选项可以让 cURL 自动跟随重定向,如果不开启这个选项,cURL 将只显示重定向这样一个响应:

curl -L URL

curl 中的代理

如果您已经配置了 http_proxy 等环境变量,cURL 会自动使用它们。如果需要手动指定代理,可以使用 -x--proxy 选项:

curl -x http://proxy:port URL

典型示例解释

在 GitHub 上您可能经常会看到类似于下面格式的使用 curl 的安装命令:

curl -fsSL https://example.com/install.sh | sh

让我们来拆解一下它的含义:

  • -f--fail 选项表示如果请求失败,不输出错误信息;
  • -s--silent 选项表示不输出进度信息;
  • -S--show-error 选项表示显示错误信息;
  • -L--location 选项表示跟随重定向。

最后,如果成功获取了数据,通过管道 | 将数据传递给 sh 命令执行。

httpie

curl 支持众多协议,而 httpie 则专注于 HTTP 协议,提供了更加人性化的命令行体验。

安装

使用 pipx 来安装 httpie

pipx install httpie

更多安装方式请见 httpie 官方文档

基本用法

使用 http 命令发送 GET 请求:

http URL

使用 -v--verbose 选项可以显示请求和响应的详细信息:

http -v URL

下载文件

使用 -d--download 将响应保存到文件,文件名将自动猜测:

http -d URL

如果希望指定文件名,使用 --output 选项:

http --output FILENAME URL

当然,也可以通过重定向的方式。

指定请求方法

为了指定不同的请求方法,可以直接将方法名作为命令行参数:

http DELETE URL

修改请求头与请求体

使用 : 分隔的键值对来指定请求头,使用 = 分隔的键值对来指定 JSON 请求体,下面是一个来自官方文档中的例子:

http PUT pie.dev/put X-API-Token:123 name=John

如果是非字符串的 JSON 数据,可以使用 := 分隔的键值对。下面是来自官方文档中的另一个例子:

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
{
    "age": 29,
    "hobbies": [
        "http",
        "pies"
    ],
    "description": "John is a nice guy who likes pies.",
    "married": false,
    "name": "John",
    "favorite": {
        "tool": "HTTPie"
    },
    "bookmarks": {
        "HTTPie": "https://httpie.org",
    }
}

对于多级 JSON 数据,还可以使用下面这样的格式(同样来自官方文档):

http pie.dev/post \
  platform[name]=HTTPie \
  platform[about][mission]='Make APIs simple and intuitive' \
  platform[about][homepage]=httpie.io \
  platform[about][homepage]=httpie.io \
  platform[about][stars]:=54000 \
  platform[apps][]=Terminal \
  platform[apps][]=Desktop \
  platform[apps][]=Web \
  platform[apps][]=Mobile
{
    "platform": {
        "name": "HTTPie",
        "about": {
            "mission": "Make APIs simple and intuitive",
            "homepage": "httpie.io",
            "stars": 54000
        },
        "apps": [
            "Terminal",
            "Desktop",
            "Web",
            "Mobile"
        ]
    }
}

认证

如果是要进行 Authorization 认证,可以组合使用 -a--auth-A--auth-type 选项。

如果只使用 -a--auth 选项,表示使用 Basic 认证:

http -a username:password pie.dev/basic-auth/username/password

如果希望使用其他认证方式,可以使用 -A--auth-type 选项:

https -A bearer -a token pie.dev/bearer

httpie 中的跟随重定向

使用 -F--follow 选项可以让 httpie 跟随重定向:

http -F URL

httpie 中的代理

httpie 同样会读取环境变量以自动设置代理,如果需要手动指定代理,可以使用 --proxy 选项:

http --proxy=http:socks5://user:pass@host:port --proxy=https:socks5://user:pass@host:port example.org

更多信息