cURL 参数详解

一、安装:

(大多数 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    发布者身份验证失败

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342