curl 命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,支持包括HTTP、HTTPS、FTP等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。
curl [options...]
$ curl --help
Usage: curl [options...] <url>
Options: H:HTTP/HTTPS, F:FTP
--anyauth 可以使用“任何”身份验证方法 (H)
-a/--append 上传文件时,附加到目标文件 (F/SFTP)
--basic 使用HTTP基本验证 (H)
--cacert FILE CA证书 (SSL)
--capath DIR CA证书 to verify peer against (SSL)
-E/--cert CERT[:PASSWD] 客户端证书文件和密码 (SSL)
--cert-type TYPE 证书文件类型 (DER/PEM/ENG) (SSL)
--ciphers LIST SSL密码 (SSL)
--compressed 要求返回是压缩的形式 (using deflate or gzip)
-K/--config FILE 指定配置文件去读取
--connect-timeout SECONDS 设置最大请求时间
-C/--continue-at OFFSET 断点续转
-b/--cookie STRING/FILE cookie字符串或文件读取位置 (H)
-c/--cookie-jar FILE 操作结束后把cookie写入到这个文件中 (H)
--create-dirs 建立本地目录的目录层次结构
--crlf 上传时把LF转变成CRLF
--crlfile FILE Get a CRL list in PEM format from the given file
-d/--data DATA http POST方式传送数据 (H)
--data-ascii DATA 以ascii的方式post数据 (H)
--data-binary DATA 以二进制的方式post数据 (H)
--data-urlencode DATA HTTP POST data url encoded (H)
--delegation STRING GSS-API delegation permission
--digest 使用数字身份验证 (H)
--disable-eprt 禁止使用EPRT或LPRT (F)
--disable-epsv 禁止使用EPSV (F)
--dns-servers DNS server addrs to use: 1.1.1.1;2.2.2.2
--dns-interface Interface to use for DNS requests
--dns-ipv4-addr IPv4 address to use for DNS requests, dot notation
--dns-ipv6-addr IPv6 address to use for DNS requests, dot notation
-D/--dump-header FILE 把header信息写入到该文件中
--egd-file FILE 为随机数据(SSL)设置EGD socket路径
--engine ENGINE 加密引擎使用 (SSL). "--engine list" for list
-f/--fail 连接失败时不显示http错误 (H)
-F/--form CONTENT 模拟http表单提交数据 (H)
--form-string STRING 模拟http表单提交数据 (H)
--ftp-account DATA Account data string (F)
--ftp-alternative-to-user COMMAND String to replace "USER [name]" (F)
--ftp-create-dirs 如果远程目录不存在,创建远程目录 (F)
--ftp-method [MULTICWD/NOCWD/SINGLECWD] 控制CWD的使用 (F)
--ftp-pasv 使用 PASV/EPSV 代替端口 (F)
-P/--ftp-port ADDRESS 使用给定的端口地址,而不是使用PASV (F)
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址 (F)
--ftp-pret Send PRET before PASV (for drftpd) (F)
--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-ccc Send CCC after authenticating (F)
--ftp-ssl-ccc-mode ACTIVE/PASSIVE Set CCC mode (F)
--ftp-ssl-control Require SSL/TLS for ftp login, clear for transfer (F)
-G/--get 以get的方式来发送数据 (H)
-g/--globoff 禁用网址序列和范围使用{}和[]
-H/--header LINE 自定义头信息传递给服务器 (H)
-I/--head 只显示请求头信息
-h, --help This help text
--hostpubmd5 MD5 Hex encoded MD5 string of the host public key. (SSH)
-0, --http1.0 Use HTTP 1.0 (H)
--http1.1 Use HTTP 1.1 (H)
--http2.0 Use HTTP 2.0 (H)
--ignore-content-length 忽略HTTP头信息的长度
-i/--include 输出时包括protocol头信息 (H/F)
-k/--insecure 允许不使用证书连接到SSL站点 (H)
--interface INTERFACE 使用指定网络接口/地址
-4, --ipv4 Resolve name to IPv4 address
-6, --ipv6 Resolve name to IPv6 address
-j/--junk-session-cookies 读取文件,忽略session cookie (H)
--keepalive-time SECONDS Interval between keepalive probes
--key KEY 私钥文件名 (SSL/SSH)
--key-type TYPE 私钥文件类型 (DER/PEM/ENG) (SSL)
--krb LEVEL 使用指定安全级别的Kerberos (F)
--libcurl FILE Dump libcurl equivalent code of this command line
--limit-rate RATE 设置传输速度
-l/--list-only 列出ftp目录下的文件名称 (F/POP3)
--local-port NUM 强制使用本地端口号
-L, --location Follow redirects (H)
--location-trusted like --location and send auth to other hosts (H)
-M/--manual 显示全手动
--mail-from FROM Mail from this address (SMTP)
--mail-rcpt TO Mail to this/these addresses (SMTP)
--mail-auth AUTH Originator address of the original email (SMTP)
--max-filesize BYTES 设置最大下载的文件总量 (H/F)
--max-redirs NUM 设置最大读取的目录数 (H)
-m/--max-time SECONDS 设置最大传输时间
--metalink Process given URLs as metalink XML file
--negotiate 使用HTTP身份验证 (H)
-n/--netrc 从.netrc文件中读取用户名和密码
--netrc-optional 使用其他的.netrc 或者 URL; overrides -n
--netrc-file FILE Set up the netrc filename to use
-N/--no-buffer 禁用缓冲输出
--no-keepalive Disable keepalive use on the connection
--no-sessionid Disable SSL session-ID reusing (SSL)
--noproxy List of hosts which do not use proxy
--ntlm 使用 HTTP NTLM 身份验证 (H)
--oauth2-bearer TOKEN OAuth 2 Bearer Token (IMAP, POP3, SMTP)
-o/--output FILE 把输出写到该文件中
--pass PASS 私钥密码 (SSL/SSH)
--post301 Do not switch to GET after following a 301 redirect (H)
--post302 Do not switch to GET after following a 302 redirect (H)
--post303 Do not switch to GET after following a 303 redirect (H)
-#/--progress-bar 将curl进度显示为一个简单的进度条;而不是标准的、具有更多信息的进度表(默认)。
--proto PROTOCOLS Enable/disable specified protocols
--proto-redir PROTOCOLS Enable/disable specified protocols on redirect
-x/--proxy [PROTOCOL://]HOST[:PORT] 在给定的端口上使用PROTOCOL(http??)代理
--proxy-anyauth 选择任意代理身份验证方法 (H)
--proxy-basic 在代理上使用基本身份验证 (H)
--proxy-digest 在代理上使用数字身份验证 (H)
--proxy-negotiate Use Negotiate authentication on the proxy (H)
--proxy-ntlm 在代理上使用ntlm身份验证 (H)
-U/--proxy-user USER[:PASSWORD] 设置代理用户名和密码
--proxy1.0 HOST[:PORT] Use HTTP/1.0 proxy on given port
-p/--proxytunnel 使用HTTP代理 (using CONNECT)
--pubkey KEY Public key file name (SSH)
-Q/--quote CMD 文件传输前,发送命令到服务器 (F/SFTP)
--random-file FILE File for reading random data from (SSL)
-r/--range RANGE 仅检索来自HTTP/1.1或FTP服务器范围内的字节
--range-file 读取(SSL)的随机文件
--raw Do HTTP "raw", without any transfer decoding (H)
-e/--referer 来源网址 (H)
-J, --remote-header-name Use the header-provided filename (H)
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
--remote-name-all Use the remote file name for all URLs
-R/--remote-time 在本地生成文件时,保留远程文件的时间
-X/--request COMMAND 指定请求命令
--resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS
--retry NUM 传输出现问题时,重试的次数
--retry-delay SECONDS 传输出现问题时,设置重试间隔时间
--retry-max-time SECONDS 传输出现问题时,设置最大重试时间
--sasl-ir Enable initial response in SASL authentication
-S/--show-error 显示错误
-s/--silent 静默模式。不输出任何东西
--socks4 HOST[:PORT] 用socks4代理给定主机和端口
--socks4a HOST[:PORT] SOCKS4a proxy on given host + port
--socks5 HOST[:PORT] 用socks5代理给定主机和端口
--socks5-hostname HOST[:PORT] SOCKS5 proxy, pass host name to proxy
--socks5-gssapi-service NAME SOCKS5 proxy service name for gssapi
--socks5-gssapi-nec Compatibility with NEC SOCKS5 server
-Y/--speed-limit RATE 停止传输速度的限制时间
-y/--speed-time SECONDS 放弃限速所要的时间,默认为30
--ssl Try SSL/TLS (FTP, IMAP, POP3, SMTP)
--ssl-reqd Require SSL/TLS (FTP, IMAP, POP3, SMTP)
-2, --sslv2 Use SSLv2 (SSL)
-3, --sslv3 Use SSLv3 (SSL)
--ssl-allow-beast Allow security flaw to improve interop (SSL)
--stderr FILE Where to redirect stderr. - means stdout
--tcp-nodelay 使用TCP_NODELAY选项
-t/--telnet-option OPT=VAL Telnet选项设置
--tftp-blksize VALUE Set TFTP BLKSIZE option (must be >512)
-z, --time-cond TIME Transfer based on a time condition
-1, --tlsv1 Use TLSv1 (SSL)
--trace FILE 对指定文件进行debug跟踪
--trace-ascii FILE 类似--trace但没有十六进制输出
--trace-time 跟踪/详细输出时,添加时间戳
--tr-encoding Request compressed transfer encoding (H)
-T/--upload-file FILE 上传文件
--url URL URL to work with
-B/--use-ascii 使用ASCII /文本传输
-u/--user USER[:PASSWORD][;OPTIONS] 设置服务器的用户名、密码和登录选项
--tlsuser USER TLS username
--tlspassword STRING TLS password
--tlsauthtype STRING TLS authentication type (default SRP)
-A/--user-agent STRING 设置用户代理发送给服务器(H)
-v, --verbose Make the operation more talkative
-V, --version Show version number and quit
-w/--write-out FORMAT 完成后输出的内容
--xattr Store metadata in extended file attributes
-q 如果作为第一个参数,含义为关闭.curlrc
-#, --progress-bar
:将curl进度显示为一个简单的进度条;而不是标准的、具有更多信息的进度表。【默认显示一个进度表,显示传输的数据量、传输速度和估计的剩余时间等】
# eg:
curl -O https://blog.csdn.net/weixin_42753043/article/details/124462270 # 默认显示进度表
curl -# -O https://blog.csdn.net/weixin_42753043/article/details/124462270,-#显示进度条
-0, --http1.0
:强制使用HTTP 1.0发出请求,而不是使用其内部首选的HTTP 1.1
-4, --ipv4
:只将名称解析为IPv4地址(如果能将一个地址解析为多个IP版本)
-6, --ipv6
:只将名称解析为IPv6地址(如果能将一个地址解析为多个IP版本)
-a, --append
:(FTP/SFTP)在上传时,追加到目标文件而不是覆盖它。如果文件不存在,将新建。
-A, --user-agent
:(HTTP)指定要发送到HTTP服务端的User-Agent字符串。模拟浏览器访问。当然也可以使用 -H, --header 选项来设置。注意:如果多次使用此选项,则将使用最后一个选项。
# eg:
curl -A "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" https://blog.csdn.net/weixin_42753043/article/details/124462270
--basic
:使用HTTP基本身份验证
-b, --cookie
:将数据作为cookie传递给HTTP服务器。是之前从服务端接收到的“Set-Cookie:”行中的数据。数据格式:“NAME1=VALUE1;NAME2 = VALUE2”。也可将cookies保存在文件中,使用 -b, --cookie 指定的文件仅用作输入。要存储cookies,可以使用 -c, --cookie-jar 选项。
-c, --cookie-jar
:在完成操作后将所有cookie写入哪个文件。
--connect-timeout
:连接服务端的超时时间。只限制连接阶段。
eg:curl --connect-timeout 10 https://youtube.com/ | head
--create-dirs
:与 -o 选项一起使用,根据需要创建必要的本地目录层次结构。
注:只创建与 -o 选项相关的dirs,没有其他内容。如果 -o 文件名没有使用dir,或者其中提到的dir已经存在,则不会创建dir。
# eg:
curl -o ./daqiang/index.html --create-dirshttps://blog.csdn.net/weixin_42753043/article/details/124462270
-C, --continue-at
:按给定偏移量继续/恢复以前的文件传输。注:使用 “-C -”,自动找出在哪里/如何恢复传输。
# eg:下载一个 2G 的文件,可以反复测试,查看结果
curl -C - -o tmp.data http://localhost/root/tmp/tmp.data
-d, --data
:在post请求中向http服务器发送指定的数据,与浏览器在用户填写HTML表单并按下submit按钮时所做的相同。使用content-type:application/x-www-form-urlencoded将数据传递给服务器。
注:常见content-type:
application/x-www-form-urlencoded、multipart/form-data、application/json、application/xml、text/xml
(1)-d, --data
可以在同一个命令行使用多次,使用指定的分隔符 & 将数据片段合并。eg:"-d name=daqiang -d ip=localhost"
将生成一个类似"name=daqiang&ip=localhost"
的post块,也可以直接这样合并使用。
(2)--data @文件名
:发送从文件中读取的数据。 eg:curl -sv --local-port 7777-d 'user=daqiang&pwd=123456' https://blog.csdn.net/weixin_42753043/login | head -n1
-D, --dump-header
:将响应协议头写入指定的文件。 eg:curl -D baidu_header.info www.baidu.com
-F, --form
:提交表单,模拟用户按下submit按钮后填充的表单。-F @文件名
,从文件中获取该文本字段的内容附加在post中。
# eg:
curl -F password=@/etc/passwd www.xx_login.com # “password”是表单字段的名称,/etc/passwd将作为输入。
curl -F "[email protected];type=text/html" url.com
curl -F "name=daniel;type=text/foo" url.com # 使用 ‘type=’指定Content-Type类型。
curl -F "file=@localfile;filename=new_name" url.com # 通过设置 filename= 更改本地上传的文件名
-G, --get
:使所有使用 -d, --data指定的数据在GET请求中使用,数据将被追加到URL的一个"?"的分隔符后。
# eg:两者等价
curl -sv -G --local-port 9000 -d 'user=daqiang&pwd=123456' https://blog.csdn.net/weixin_42753043/login/ | head -n1
curl -sv --local-port 9000 "https://blog.csdn.net/weixin_42753043/login/?user=daqiang&pwd=123456" | head -n1
-H, --header
:发送自定义请求头,可多次用于添加/替换/删除多个headers。
# eg:
curl -H 'Connection: keep-alive' -H 'Referer: https://www.baidu.com' -H 'User-Agent: Mozilla/1.0' https://blog.csdn.net/weixin_42753043/login/
--keepalive-time
:keepalive 时长。如果使用no-keepalive,则此选项无效。如果未指定,默认为60秒。
--limit-rate
:指定最大传输速率(带宽)。单位:默认字节。附加"k"、"K"表示千字节,“m”、“M"表示兆字节,而"g”、"G"表示千兆字节。注意:指的是整个传输过程中计算的平均速度。
eg:
curl --limit-rate 500k http://www.baidu.com/、curl --limit-rate 2m http://www.baidu.com/
--local-port
:指定本地的一个端口或端口范围去连接。
eg:
curl --local-port 9000 http://www.baidu.com/
curl --local-port 9000-9999 http://www.baidu.com/
-m, --max-time
:允许整个操作花费的最大时间(以秒为单位)。
# eg:
curl -m 10 --limit-rate 5 http://www.baidu.com/ | head # 超过10秒后,断开连接
–max-filesize :指定要下载的文件的最大大小(以字节为单位)。如果请求的文件大于这个值,那么传输将不会启动,curl将返回退出代码63。
# eg:
curl --max-filesize 10 -I https://img-blog.csdnimg.cn/da12156d1031450fb6f26ee8a53e8f99.png # 受限异常
-o, --output
:输出到一个文件,而不是标准输出。
-O, --remote-name
:写入到本地文件,名称与远程文件的名称相同。使用了 -O 选项,必须指定到具体的文件
# eg:
curl -O https://www.baidu.com/index.html
--retry
:传输出现问题时,重试的次数。数字设置为0将使curl不重试(这是缺省值)。
--retry-delay
:传输出现问题时,设置重试间隔时间。
--retry-max-time
:传输出现问题时,设置最大重试时间。将此选项设置为0则不超时重试。
-s, --silent
:静默模式。不显示进度表/条或错误消息。
-T, --upload-file
:这将指定的本地文件传输到远程URL。
-v, --verbose
:显示详细操作信息。主要用于调试。
-x, --proxy <[protocol://][user:password@]proxyhost[:port]>
:使用指定的HTTP代理。如果没有指定端口号,则默认位于端口1080。
-X, --request
:指定与HTTP服务器通信时的请求方式。默认GET。
# eg:
curl -vs -X POST https://www.baidu.com | head -n1
curl -vs -X PUT https://www.baidu.com | head -n1