curl
是一个用于在命令行下进行数据传输的工具,支持多种协议,包括 HTTP
、HTTPS
、FTP
、FTPS
、SCP
、SFTP
等。它通常用于从网页下载数据、上传文件,或者与 Web
服务进行交互。该命令设计为无需用户交互即可工作。
curl
可以在许多场景中使用,下面只是整理了在日常工作中常用的命令,后续如果有用到其他的命令再更新。
curl
命令的参数挺多的,实际用的时候可直接参考 curl
的文档。
# 查看 curl 的文档
man curl
# or
curl --help
以下是一些常见的 curl
HTTP 请求示例:
发送简单的 GET 请求:
curl http://example.com
发送带参数的 GET 请求:
curl "http://example.com/api?param1=value1¶m2=value2"
发送 POST 请求(JSON 数据):
curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1","key2":"value2"}' http://example.com/api
发送 POST 请求(表单数据):
curl -X POST -d "param1=value1¶m2=value2" http://example.com/resource
使用特定的请求头发送 GET 请求:
curl -H "Authorization: Bearer token123" http://example.com/api/data
显示详细的请求和响应信息:
curl -v http://example.com
跟踪重定向并显示详细信息:
curl -L -v http://example.com
使用代理发送请求:
curl -x proxy.example.com:8080 http://example.com
基本认证(用户名和密码)发送请求:
curl -u username:password http://example.com
上传文件(HTTP PUT 请求):
curl -X PUT -d "@localfile.txt" http://example.com/resource
发送 DELETE 请求:
curl -X DELETE http://example.com/resource/123
使用 Cookies:
curl -b "cookie1=value1;cookie2=value2" http://example.com
-b
选项用于发送请求时携带 Cookies。
保存 Cookies 到文件并加载:
curl -c cookies.txt http://example.com
curl -b cookies.txt http://example.com
-c
选项用于保存 Cookies 到文件,-b
用于加载 Cookies 文件。
设置超时时间:
curl --max-time 10 http://example.com
--max-time
用于设置最大请求时间(秒),超过此时间将中止请求。
限制带宽:
curl --limit-rate 100k http://example.com
--limit-rate
用于设置下载速度限制。
模拟浏览器 User-Agent:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" http://example.com
-A
选项用于设置 User-Agent。
简单下载文件:
curl -O http://example.com/file.zip
-O
选项将远程文件保存到本地,并使用远程文件名。
下载文件并保存为指定文件名:
curl -o local_filename.zip http://example.com/file.zip
使用 -o
选项可以指定本地文件的名称。
下载文件并显示下载进度条:
curl -# -O http://example.com/largefile.zip
-#
选项显示下载进度条。
断点续传下载(续传已下载的部分):
curl -C - -O http://example.com/largefile.zip
-C -
选项用于断点续传。
简单上传文件:
curl -T localfile.txt http://example.com/upload/
-T
选项用于上传本地文件。
上传文件并显示上传进度条:
curl -# -T localfile.txt http://example.com/upload/
-#
选项显示上传进度条。
使用 HTTP POST 上传文件:
curl -X POST -F "file=@localfile.txt" http://example.com/upload/
使用 -F
选项可以通过 POST 请求上传文件。
使用 FTP 上传文件:
curl -T localfile.txt ftp://ftp.example.com/upload/
通过 FTP 协议上传文件。
上传文件并设置文件名:
curl -F "file=@localfile.txt;filename=remote_filename.txt" http://example.com/upload/
使用 -F
选项设置远程文件名。
列出 FTP 目录内容:
curl ftp://example.com
下载 FTP 文件:
curl -O ftp://example.com/file.zip
上传文件到 FTP:
curl -T localfile.txt ftp://example.com/upload/
使用 HTTP 代理:
curl -x http://proxy.example.com:8080 http://example.com
这个例子中,http://proxy.example.com:8080
是您的 HTTP 代理的地址和端口。
使用 SOCKS5 代理:
curl --proxy socks5://proxy.example.com:1080 http://example.com
这个例子中,socks5://proxy.example.com:1080
是您的 SOCKS5 代理的地址和端口。
使用代理并提供用户名和密码:
curl -x http://user:password@proxy.example.com:8080 http://example.com
如果代理需要用户名和密码进行身份验证,您可以将它们包含在 URL 中。
设置超时时间:
curl --max-time 10 http://example.com
--max-time
选项用于设置最大请求时间,即超过该时间将中止请求。
限制带宽:
curl --limit-rate 100k http://example.com
--limit-rate
选项用于设置下载速度限制。
忽略证书检查(不安全,谨慎使用):
curl --insecure https://example.com
--insecure
选项用于禁用对 SSL 证书的验证。这通常在测试环境或确信连接安全的情况下使用。
在 curl
中,您可以使用不同的选项来进行身份认证。以下是一些示例,演示如何使用 curl
进行基本认证和其他身份认证方式:
基本认证(用户名和密码):
curl -u username:password http://example.com
在这个例子中,-u
选项用于提供用户名和密码,格式为 username:password
。
使用 API 密钥进行认证:
curl -H "Authorization: Bearer your_api_key" http://example.com/api/data
这个例子中,-H
选项用于设置请求头,包括 Authorization
字段,值为 Bearer 后跟您的 API 密钥。
使用客户端证书进行认证:
curl --cert client.pem --key client-key.pem https://example.com
在这个例子中,--cert
和 --key
选项用于指定客户端证书和私钥文件进行 SSL 客户端身份认证。
使用 OAuth 2.0 令牌进行认证:
curl -H "Authorization: Bearer your_access_token" http://example.com/resource
这个例子中,-H
选项用于设置请求头,包括 Authorization
字段,值为 Bearer 后跟您的 OAuth 2.0 访问令牌。
显示请求和响应头信息:
curl -i http://example.com
使用 -i
选项,curl
将显示包括响应头在内的详细信息。
显示请求和响应的详细信息(包括通信过程):
curl -v http://example.com
使用 -v
选项,curl
将显示通信过程中的详细信息,包括请求和响应头。
跟踪重定向并显示详细信息:
curl -L -v http://example.com
在使用 -L
选项的同时,结合 -v
选项,curl
将跟踪重定向并显示详细信息。
显示进度条:
curl -# -O http://example.com/largefile.zip
使用 -#
选项,curl
将显示下载进度条,有助于了解下载进度。
使用 --trace
选项记录通信过程到文件:
curl --trace trace.log http://example.com
--trace
选项用于将通信过程记录到指定文件中,以便后续分析。
显示 DNS 查询信息:
curl -v http://example.com --trace-ascii /dev/stdout | grep "Looking up"
使用 -v
选项显示详细信息,结合 --trace-ascii
选项将通信过程记录到标准输出,然后使用 grep
过滤 DNS 查询信息。
执行健康检查(检查网站是否正常工作):
curl -sSf http://example.com > /dev/null || echo "Site is down"
在这个例子中,-sSf
选项用于静默模式(不显示进度条),并在请求失败时返回非零退出码,> /dev/null
用于将输出重定向到空设备,最后通过 ||
判断请求是否失败。
获取网站的 IP 地址:
curl -s http://example.com | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
这个例子中,-s
选项用于静默模式,grep
结合正则表达式用于提取页面中的 IP 地址。
检查网页内容是否包含特定关键词:
curl -s http://example.com | grep -q "keyword" && echo "Keyword found"
使用 -s
选项静默模式,grep -q
用于在输出中查找关键词,成功匹配则返回零退出码。