前言
curl 是一个强大的命令行工具,支持 HTTP, HTTPS, SCP 等多种协议,本文主要总结一下其常用的功能,方便及时查阅。
curl --version
curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3
Release-Date: 2020-01-08
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets
命令行选项
短选项
curl -v baidu.com # 显示中间的操作过程
curl -L baidu.com # 跟随 HTTP 重定向
curl -vL baidu.com # vL 可以写在一起
curl -v -L baidu.com # v L 可以分开
curl baidu.com -vL # vL 可以放在目标后面
长选项
虽然短选项写起来简单快速,但是英文字母是有限的,所以能控制的功能开关也是有限的。
长选项虽然写起来慢点,但能控制的功能更多,且代码可读性会更好。
curl --verbose --location baidu.com
带参数选项
不是所有的功能都像开关似的,只有 true 和 false 两种值,有些功能需要传递参数。
curl -d ‘{"username":"xyz","password":"abc"}‘ example.com
curl -d @info.json example.com # 也可以直接从文件中读取
HTTP 基本操作
GET
curl www.baidu.com
POST
curl -d ‘name=xiaoming&age=18‘ baidu.com
-d
参数会默认生成 request header Content-Type: application/x-www-form-urlencoded
使用 -H
参数定制 request header
curl -v -H ‘Content-Type: application/json‘ -d ‘{"name":"xiaoming","age":"18"}‘ baidu.com
curl --data-binary @filename baidu.com # 发送原始2进制文件
PUT DELETE
使用 -X
来改变 http request method
curl -d "data" -X PUT http://example.com
curl -d -X PUT http://example.com
使用 cookie
# 将请求获取的 cookie 保存到 cookie.txt 文本中
curl --cookie-jar cookie.txt --data ‘{"name":"abc","password":"xyz"}‘ example.com
# 携带 cookie 请求其他接口
curl --cookie cookie.txt example.com
获取响应状态码
code=$(curl -o /dev/null --silent --write-out "%{http_code}\n" baidu.com)
echo $code
-o /dev/null
将返回内容输出到空设备
--silent
静默模式,即没有以上的统计信息
--write-out
在请求完成后,将一些特定信息打印到控制台上,比如:method ,http_code,remote_ip 等