一、安装:
(大多数 Linux 发行版都预先安装了 curl 包,不需要自行安装)
Ubuntu:sudo apt install curl
CentOS:sudo yum install curl
二、参数格式
参数可以放在整个命令行的任何位置(除了 curl 前面!)
短格式长格式
-v--verbose
-vL--verbose --location
三、参数详解
排序参数描述用法
A-A/--user-agent <string>指定客户端的用户代理,默认是 curl/[version](H)curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/76.0.3809.100 Safari/537.36' 192.168.41.203 -v
curl -A '' 192.168.41.203
B-b/--cookie <name=data>向服务器发送 cookie(H)curl -b 'foo1=bar;foo2=bar2' 192.168.41.203
curl -b cookies.txt 192.168.41.203
C-c/--cookie-jar <filename>将服务器设置的 cookie 写入一个文件curl -c cookie.txt 192.168.41.203
-C/--continue-at <offset>断点续传。<offset>是一个数值,表示从文件头开始计算的要跳过的字节数。如果<offset>被设定为 -,那么将自行检测待传输文件的断点位置curl -C - -O 'http://10.2.19.250/400k.html' --limit-rate 10k
D
-d/--data <data>以 POST 方式传送数据,请求头会自动加上 Content-Type:application/x-www-form-urlencoded,key=value数据应该是url转义的(H)curl -d 'name=admin&password=123' 192.168.41.203
curl -H 'Content-Type: text/xml' -d 'hello' 10.2.19.250:8181/upload -v #发送 XML 数据
curl -H 'Content-Type: application/json' -d '{"query": "cats"}' 10.2.19.250:8181/upload -v #发送 json 数据
--data-urlencode将发送的数据进行 URL 编码(H)curl --data-urlencode 'name=admin password=123' 192.168.41.203
--data-binary将发送的数据进行二进制编码(H)
--data-raw无法读取文件,只能发送字符串(H)
-D/--dump-header将响应头写入文件curl 192.168.41.203 -D test.txt
E-e/--referer设置请求头 Referer,表示请求的来源(H)curl -e 'a.com' 192.168.41.203 -v
curl -e '' 192.168.41.203 -v
F-F/--form <name=content>模拟用户在浏览器上“submit”的操作,请求头会自动加上 Content-Type: multipart/form-data(H)curl -F 'file=@1.html' 'http://10.2.19.250:8181/upload' -v
curl -F 'name=johnny' 'http://10.2.19.250:8181/upload' -v #提交表单
curl -F 'file=@1.html;filename=11.html' 'http://10.2.19.250:8181/upload' -v #修改服务器接收到的文件名为 11.html
G-g/--globoff关闭 URL 的通配符功能,允许 URL 中含有字符 {} 和[]curl -g "http://[5af0::2]" -v
-G/--get构造 URL 的查询字符串,以 GET 方式发送数据(H)curl -G -d 'a=1' -d 'b=2' 192.168.41.203 -v
curl -G --data-urlencode 'id=1 or 1=2' 192.168.41.148 -v
H-h/--help显示简要帮助手册curl -h
H/--header <header>添加 HTTP 请求头curl -H 'Host:a.com' 192.168.41.203 -v
I
-i/--include打印响应头和网页代码curl -i 192.168.41.203
--interface <name>使用指定网卡传输数据curl --interface en0 www.baidu.com -v
-I/--head向服务器发出 HEAD 请求,打印响应头curl -I 192.168.41.203
K-k/--insecure允许连接到 SSL 站点,而不使用证书curl -k 'https://192.168.41.205'
-K/--config <file>从指定的文件中读取选项curl -K curl.options 192.168.41.203
L
-L/--location跟随服务器的重定向(H)curl -L 192.168.41.148 -v
--limit-rate <speed>限制请求和响应的带宽,模拟慢网速的环境curl --limit-rate 100k 192.168.41.203 #将带宽限制在每秒 200K 字节(单位还有 m/g)
curl --limit-rate 1 192.168.41.203 #不指定单位时,默认单位为字节
--local-port <num>为连接指定一个本地端口curl --local-port 5000 192.168.41.203 -v
M-m/--max-time <seconds>最大传输时间curl -O 'http://10.2.19.250/400k.html' --limit-rate 10k -m 2 # 2s 后停止下载
-M/--manual显示完整帮助手册curl -M
N --next在一个命令行中处理多个 URLcurl -vL 192.168.41.148:81 --next -v 192.168.41.203 --next -k "https://192.168.41.205"
O-o/--output <file>将服务器的响应体保存成文件curl 192.168.41.203 -o test.txt
-O/--remote-name将服务器的响应体保存成文件,并用 URL 的最后一部分作为文件名curl -O 'http://192.168.41.203/index.html'
Q-q如果这个参数是 curl 命令的第一个参数,那么 curl 命令将不会去读取默认的 curlrc 配置文件
R-r/--range <range>仅检索范围内的字节,分段下载curl 'http://192.168.41.203/index.html' -O -r 0-1
S-s/--silent不打印错误和进度信息,如果返回正确会打印响应体curl -s 'https://192.168.41.203'
curl -s -o /dev/null 'https:192.168.41.203' #不打印任何信息
-S/--show-error只输出错误信息,通常与 -s 一起使用curl -S -s -o /dev/null 'https://192.168.41.203'
T --trace <file>启用对所有数据包传输的追踪,并记录到指定文件中。当文件名是符号 - 时,追踪消息将输出到标准输出curl --trace - 192.168.41.203
curl --trace dump 192.168.41.203
curl --trace-ascii - 192.168.41.203
--trace-time添加时间戳,与 -v 和 --trace - 结合curl -v --trace-time 192.168.41.203
curl --trace - --trace-time 192.168.41.203
-T/--upload-file <file>将文件上传到指定位置curl -T 1.html "ftp://192.168.41.206/pub/"
U-u/--user <user:password>设置 HTTP 认证的用户名和密码curl -u 'admin:FE9F9x7q' 'https://192.168.41.148:9443/login' -k -v
curl -u 'admin' 'https://192.168.41.148:9443/login' -k -v #询问密码
V-v/--verbose打印关于请求和响应的详细信息curl -v 192.168.41.203
-V/--version显示版本号curl -V
W-w/--write-out <format>格式化输出请求结果curl -v 'http://192.168.41.203' -w %{http_code} #可用变量见【六】
X-x/--proxy <proxyhost[:port]>在指定的端口上使用代理,如果没有指定代理协议,默认为 HTTPcurl -v "www.google.com" -x "socks5://127.0.0.1:1081"
-X/–request <method>指定 HTTP 请求的方法curl -X POST 10.2.19.250:8181/upload -v #(方法还包括 GET/PUT/DELETE)
Z-z/--time-cond <time>基于时间的传输,时间以 - 开头表示该时间以前,以数字开头表示该时间以后curl -z 15-Jun-20 192.168.41.203 -v # 2020-6-15之后有更新就返回响应体
curl -z -15-Jun-20 192.168.41.203 -v # 2020-6-15之前有更新就返回响应体
#
-#/--progress-bar显示进度条curl -# -O 'http://10.2.19.250/400k.html'
-0/--http1.0强制在 HTTP 传输时使用 1.0 协议,默认使用 HTTP 1.1(H)curl -0 192.168.41.203 -v
--http2强制在 HTTP 传输时使用 HTTP2 协议,默认使用 HTTP 1.1(H)curl -vk --http2 "https://192.168.41.148"
-1/--tlsv1强制在 SSL 传输时使用 TLS v1 协议(H)
-2/--sslv2强制在 SSL 传输时使用 SSL v2 协议(H)
-3/--sslv3强制在 SSL 传输时使用 SSL v3 协议(H)
-4/--ipv4将域名解析为 IPv4 地址curl -4 www.baidu.com -v
-6/--ipv6将域名解析为 IPv6 地址curl -6 www.baidu.com -v
注:(H) 表示仅适用 HTTP/HTTPS ,(F) 表示仅适用于 FTP
四、浏览器 → curl
Chrome:F12 → 选择 Network 选项卡 -> 选择一个请求 → 右键选择 Copy → 选择 Copy as cURL
curl → python:https://curl.trillworks.com/
五、参考文档
https://catonmat.net/cookbooks/curl
https://www.dazhuanlan.com/2019/10/24/5db1c6620cd58/
http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
https://www.cnblogs.com/doseoer/p/7044344.html
六、其他说明
说明项内容
说明项内容
-w 详解<format>部分即格式化输出内容,变量使用格式为 %{varible},使用 %% 输出百分号 %,使用 \r、\n、\t 输出 回车、换行、制表符
url_effective - 上次访问的URL。
http_code - http状态码。
http_connect - 上一次 CONNECT 请求中的数值代码。 (Added in 7.12.4)
time_total - 总时间,按秒计。精确到小数点后三位。
time_namelookup - DNS解析时间,从请求开始到DNS解析完毕所用时间。
time_connect - 连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间,如果需要单纯的得到连接时间,用这个time_connect时间减去前边time_namelookup时间。
time_appconnect - 应用层协议,如 SSL/SSH、三次握手等过程完成所花费的时间。(Added in 7.19.0)
time_pretransfer - 从开始到准备传输的时间。
time_redirect - 从跳转链接被激活到真正开始从跳转链接下载数据所经过的时间。 (Added in 7.12.3)
time_starttransfer - 开始传输时间。在发出请求之后,Web 服务器返回数据的第一个字节所用的时间。
size_download - 下载大小。
size_upload - 上传大小。
size_header - 下载的header的大小。
size_request - 请求的大小。
speed_download - 平均下载速度,单位-字节每秒。
speed_upload - 平均上传速度,单位-字节每秒。
content_type - 被请求访问的文件的 Content_Type 类型。
num_connects - 新连接数。(Added in 7.12.3)
num_redirects - 访问请求中包含的跳转链接数量. (Added in 7.12.3)
redirect_url - 重定向实际请求地址。 (Added in 7.18.2)
ftp_entry_path - 登录到ftp服务器的原始路径。(Added in 7.15.4)
ssl_verify_result - ssl认证结果,返回0表示认证成功。(Added in 7.19.0)
注意:
若多次使用-w参数,按最后一个的格式输出。
Added in XXX 表示支持该变量curl所需的最低版本。
curl 返回码 1 curl 不支持该协议
2 curl 初始化失败
3 URL 格式错误
5 解析代理服务器失败
6 解析主机失败
7 建立与主机的连接失败
8 无法解析 FTP 服务器返回的消息
9 FTP 服务器拒接访问。可能是拒绝登录或拒绝访问特定目录,但很多情况下是访问了一个不存在的位置导致的
11 无法解析 FTP 服务器的 PASS 回复消息
13 无法解析 FTP 服务器的 PASV 回复消息
14 无法解析 FTP 服务器的 227-line 回复消息
15 无法解析 FTP 主机
17 无法与 FTP 服务器建立二进制传输模式
18 文件传输不完整。只有文件的一部分被传送了。
19 FTP 下载/访问指定的文件失败
21 FTP 引用错误
22 HTTP 页面获取失败。将返回 400 及其以上的错误码。
23 写入数据到本地文件系统发生错误
25 FTP 服务器无法存储被上传的文件
26 读取数据出错
27 内存分配失败
28 操作超时
30 FTP 服务器运行 PORT 命令失败
31 FTP 服务器运行 REST 命令失败
33 HTTP 服务器执行 range 命令失败
34 HTTP 服务器 post 方法错误
35 SSL 连接出错。通常是 SSL 握手失败。
36 FTP 断点续传出错,无法继续前一次下载任务。
37 FILE 协议无法打开文件。可能是没有权限导致的
38 LDAP 协议无法执行 bind 操作
39 LDAP 协议执行搜索功能失败
41 没有找到匹配的 LDAP 功能
42 curl 被其它应用程序中止运行
43 发生内部错误。通常是因为调用函数时传递了错误的参数
45 接口调用错误
47 跳转链接数量达到上限
48 为 telnet 协议指定了一个未知的参数
49 telnet 协议的参数格式有误
51 SSL 认证或 SSH 的 MD5 指纹不正确
52 服务器无应答
53 未找到 SSL 加密引擎
54 无法将 SSL 加密引擎设为默认引擎
55 发送网络数据失败
56 接收网络数据失败
58 本地证书有问题
59 无法使用指定的 SSL 密码
60 已知的 CA证书无法用于验证
61 无法识别传输编码
62 无效的 LDAP URL
63 文件大小超过限制
64 请求的 FTP SSL 级别获取失败
65 发送需要进行 rewind 的数据失败
66 解析 SSL 引擎失败
67 用户名/密码验证失败,curl 无法登录
68 TFTP 服务器上没有找到指定的文件
69 对 TFTP 服务器的访问出现权限问题
70 TFTP 服务器已耗尽磁盘空间
71 非法的 TFTP 操作
72 未知的 TFTP 传输 ID
73 TFTP 企图传输一个已经存在的文件
74 用户不存在导致 TFTP 操作失败
75 字符转换失败
76 需要使用字符转换函数
77 读取 SSL CA 证书出错。可能是证书路径不正确,也可能是没有权限
78 URL 中指定的资源不存在
79 SSH 会话中发生了未知错误
80 中断 SSH 连接失败
82 无法加载 CRL 文件。可能是没有指定正确的格式
83 发布者身份验证失败