Curl 是一个常用的命令行数据传输工具,可以方便的从命令行创建网络请求。它支持众多协议,支持如 HTTP, HTTPS, FTP, FTPS, SFTP, IMAP, SMTP, POP3 等等协议。Curl 提供了很多强大的功能,可以利用它来进行 HTTP 请求、上传/下载文件等,且支持 Cookie、用户密码验证、代理隧道、限速等。

Curl 用于上传和下载指定 URL 的数据,它是一个客户端(client-side)工具,一个客户端 URL 工具。这也是它的名字的由来。

curl 使用指南

发起一个 HTTP GET 请求

1
curl cip.c

可以使用-o ip.txt选项将响应结果输出到文件

重定向跟踪 (-L)

当请求一个 URL 返回 301 之类的重定向响应时,可以使用 -L 参数来自动重定向跟踪响应头里的Location

获取 HTTP 响应头 (-i)

使用-i 参数可以参看请求 URL 的响应头。

如果只想获取响应头,可以使用-I参数。

1
2
3
4
5
6
7
8
9
> curl -I cip.cc
HTTP/1.1 200 OK
Server: openresty
Date: Tue, 08 Nov 2022 12:57:51 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-cip-c: H

构造 GET 查询参数 (-G)

可以通过 -G 参数来构造 URL 的查询字符串

1
curl -G -d 'q=xxx&b=xxx' https://httpbin.org/get

注意:如果忘记了-G参数,curl 会发出 POST 请求。

如果数据需要 URL 编码,可以结合使用--data--urlencode参数。

1
curl -G --data-urlencode 'q=xxx' https://httpbin.org/get

发送一个 HTTP POST 请求

默认情况下,curl 发送的是 GET 请求。要使其发送 POST 请求,需要使用-X POST命令行参数。

1
curl -X POST https://httpbin.org/post

使用-d选项添加请求数据

1
curl -d 'login=xxx' https://httpbin.org/post

使用-H选项添加请求头

1
curl -d '{"option": "value", "something": "anothervalue"}' -H "Content-Type: application/json" -X POST https://httpbin.org/post

HTTP 认证 (-u)

如果目标 URL 需要 HTTP Basic Authentication,可以通过-u参数传递user:password来鉴权

1
curl -u user:pass http://httpbin.org/basic-auth/user/pass

打印请求的详细日志 (-v)

使用 -v 参数可以打印出 curl 请求的所有请求与响应详细日志。它是–verbose 的简写。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
> curl -v -I http://httpbin.org/get
*   Trying 54.166.148.227...
* TCP_NODELAY set
* Connected to httpbin.org (54.166.148.227) port 80 (#0)
> HEAD /get HTTP/1.1
> Host: httpbin.org
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
...

限制 HTTP 带宽 (–limit-rate)

默认情况下,curl 使用最大可用带宽,但是通常我们需要放慢速度进行测试。可以使用–limit-rate 来限制 curl 的请求和响应的带宽,让请求与响应变慢。

1
curl --limit-rate 200k http://httpbin.org/get

参考