参数解释

(H) means HTTP/HTTPS only, (F) means FTP only

命令含义
--anyauth选择“任意”身份验证方法(H)
-a, --append上载时附加到目标文件(F/SFTP)
--basic使用HTTP Basic身份验证(H)
--cacert FILE验证对等方的CA证书(SSL)
--capath DIR验证对等方的CA目录(SSL)
-E, --cert CERT[:PASSWD]客户端证书文件和密码(SSL)
--cert-type TYPE证书文件类型(DER/PEM/ENG)(SSL)
--ciphers LIST要使用的SSL密码(SSL)
--compressed请求压缩响应(使用deflate或gzip)
-K, --config FILE指定要读取的配置文件
--connect-timeout SECONDS允许连接的最长时间
-C, --continue-at OFFSET恢复传输偏移
-b, --cookie STRING/FILE从(H)读取cookies的字符串或文件
-c, --cookie-jar FILE操作(H)后将cookies写入此文件
--create-dirs创建必要的本地目录层次结构
--crlf上传时将LF转换为CRLF
--crlfile FILE从给定文件中获取PEM格式的CRL列表
-d, --data DATAHTTP POST数据(H)
--data-ascii DATAHTTP POST ASCII数据(H)
--data-binary DATAHTTP后二进制数据(H)
--data-urlencode DATAHTTP POST数据url编码(H)
--delegation STRING GSS-API委托权限
--digest使用HTTP摘要身份验证(H)
--disable-eprt使用EPRT或LPRT(F)抑制
--disable-epsv使用EPSV(F)抑制
-D, --dump-header FILE将标题写入此文件
--egd-file FILE随机数据的EGD套接字路径(SSL)
--engine ENGINGE加密引擎(SSL)。”--“引擎列表”用于列表
-f, --fail在HTTP错误(H)上无提示地失败(根本没有输出)
-F, --form CONTENT指定HTTP多部分POST数据(H)
--form-string STRING指定HTTP多部分POST数据(H)
--ftp-account DATA帐户数据字符串(F)
--ftp-alternative-to-user COMMAND替换“USER[name]”的字符串(F)
--ftp-create-dirs如果不存在,则创建远程目录(F)
--ftp-method [MULTICWD/NOCWD/SINGLECWD]控制CWD使用(F)
--ftp-pasv使用PASV/EPSV代替端口(F)
-P, --ftp-port ADR使用指定地址的端口而不是PASV(F)
--ftp-skip-pasv-ip跳过PASV(F)的IP地址
--ftp-pret在PASV之前发送PRET(用于drftpd)(F)
--ftp-ssl-ccc认证后发送CCC(F)
--ftp-ssl-ccc-mode主动/被动设置CCC模式(F)
--ftp-ssl-controlftp登录需要SSL/TLS,传输清除(F)
-G, --get使用HTTP GET(H)发送-d数据
-g, --globoff使用{}和[]禁用URL序列和范围
-H, --header LINE要传递到服务器的自定义头(H)
-I, --head仅显示文档信息
-h, --help此帮助文本
--hostpubmd5 MD5主机公钥的十六进制编码MD5字符串。(宋承宪)
-0, --http1.0使用HTTP 1.0(H)
--ignore-content-length忽略HTTP内容长度头
-i, --include在输出中包括协议头(H/F)
-k, --insecure允许连接到没有证书的SSL站点(H)
--interface INTERFACE指定要使用的网络接口/地址
-4, --ipv4将名称解析为IPv4地址
-6, --ipv6将名称解析为IPv6地址
-j, --junk-session-cookies忽略从文件(H)读取的会话cookie
--keepalive-time SECONDSkeepalive探针之间的间隔
--key KEY私钥文件名(SSL/SSH)
--key-type TYPE私钥文件类型(DER/PEM/ENG)(SSL)
--krb LEVEL启用具有指定安全级别(F)的Kerberos
--libcurl FILE转储此命令行的libcurl等效代码
--limit-rate RATE将传输速度限制在此速率
-l, --list-only仅列出FTP目录的名称(F)
--local-port RANGE强制使用这些本地端口号
-L, --location遵循重定向(H)
--location-trustedlike——定位并向其他主机发送身份验证(H)
-M, --manual显示完整手册
--mail-from FROM来自此地址的邮件
--mail-rcpt TO邮件收件人
--mail-auth AUTH原始电子邮件的发件人地址
--max-filesize BYTES要下载的最大文件大小(H/F)
--max-redirs NUM允许的最大重定向数(H)
-m, --max-time SECONDS允许传输的最长时间
--metalink将给定的url作为metalink XML文件处理
--negotiate使用HTTP协商身份验证(H)
-n, --netrc必须读取.netrc以获取用户名和密码
--netrc-optional使用.netrc或URL;覆盖-n
--netrc-file FILE设置要使用的netrc文件名
-N, --no-buffer禁用输出流的缓冲
--no-keepalive在连接上禁用keepalive
--no-sessionid禁用SSL会话ID重用(SSL)
--noproxy不使用代理的主机列表
--ntlm使用HTTP NTLM身份验证(H)
-o, --output FILE将输出写入<file>而不是stdout
--pass PASS私钥的密码短语(SSL/SSH)
--post301在执行301重定向(H)后不要切换到GET
--post302在执行302重定向(H)后不要切换到GET
--post303执行303重定向(H)后不要切换到GET
-#, --progress-bar将传输进度显示为进度条
--proto PROTOCOLS启用/禁用指定的协议
--proto-redir PROTOCOLS在重定向时启用/禁用指定的协议
-x, --proxy [PROTOCOL://]HOST[:PORT]在给定端口上使用代理
--proxy-anyauth选择“任意”代理身份验证方法(H)
--proxy-basic在代理上使用基本身份验证(H)
--proxy-digest在代理上使用摘要身份验证(H)
--proxy-negotiate在代理上使用协商身份验证(H)
--proxy-ntlm在代理上使用NTLM身份验证(H)
-U, --proxy-user USER[:PASSWORD]代理用户和密码
--proxy1.0 HOST[:PORT]在给定端口上使用HTTP/1.0代理
-p, --proxytunnel通过HTTP代理隧道操作(使用CONNECT)
--pubkey KEY公钥文件名(SSH)
-Q, --quote CMD传输前向服务器发送命令(F/SFTP)
--random-file FILE用于从(SSL)读取随机数据的文件
-r, --range RANGE仅检索范围内的字节
--raw执行HTTP“raw”,不进行任何传输解码(H)
-e, --referer参考URL(H)
-J, --remote-header-name使用头提供的文件名(H)
-O, --remote-name将输出写入名为远程文件的文件
--remote-name-all对所有URL使用远程文件名
-R, --remote-time在本地输出上设置远程文件的时间
-X, --request COMMAND指定要使用的请求命令
--resolve HOST:PORT:ADDRESS强制解决主机:端口到地址
--retry NUM如果出现暂时性问题,重试请求次数
--retry-delay SECONDS重试时,请在每个
--retry-max-time SECONDS仅在此期间内重试
-S, --show-error显示错误。使用-s,使curl在发生错误时显示错误
-s, --silent静音模式。不输出任何内容
--socks4 HOST[:PORT]给定主机+端口上的SOCKS4代理
--socks4a HOST[:PORT]给定主机+端口上的SOCKS4a代理
--socks5 HOST[:PORT]给定主机+端口上的SOCKS5代理
--socks5-basic为SOCKS5代理启用用户名/密码身份验证
--socks5-gssapi为SOCKS5代理启用GSS-API身份验证
--socks5-hostname HOST[:PORT]SOCKS5 proxy,将主机名传递给proxy
--socks5-gssapi-service NAMEgssapi的SOCKS5代理服务名称
--socks5-gssapi-nec与NEC SOCKS5服务器兼容
-Y, --speed-limit RATE在“速度时间”秒内停止低于速度限制的传输
-y, --speed-time SECONDS触发速度限制中止的时间。默认为30
--ssl尝试SSL/TLS(FTP、IMAP、POP3、SMTP)
--ssl-reqd需要SSL/TLS(FTP、IMAP、POP3、SMTP)
-2, --sslv2使用SSLv2(SSL)
-3, --sslv3使用SSLv3(SSL)
--ssl-allow-beast允许安全缺陷改善互操作(SSL)
--stderr FILE重定向stderr的位置。-表示标准输出
--tcp-nodelay使用TCP_NODELAY选项
-t, --telnet-option OPT=VAL设置telnet选项
--tftp-blksize VALUE设置TFTP BLKSIZE选项(必须大于512)
-z, --time-cond TIME基于时间条件的传输
-1, --tlsv1使用=>TLSv1(SSL)
--tlsv1.0使用TLSv1.0(SSL)
--tlsv1.1使用TLSv1.1(SSL)
--tlsv1.2使用TLSv1.2(SSL)
--trace FILE将调试跟踪写入给定文件
--trace-ascii FILELike--trace但没有十六进制输出
--trace-time向跟踪/详细输出添加时间戳
--tr-encoding请求压缩传输编码(H)
-T, --upload-file FILE将文件传输到目标
--url URL要使用的URL
-B, --use-ascii使用ASCII/文本传输
-u, --user USER[:PASSWORD]服务器用户和密码
--tlsuser USERTLS用户名
--tlspassword STRINGTLS密码
--tlsauthtype STRINGTLS身份验证类型(默认SRP)
--unix-socket FILE通过这个UNIX域套接字连接
-A, --user-agent STRING发送到服务器的用户代理(H)
-v, --verbose让行动更具说服力
-V, --version显示版本号并退出
-w, --write-out FORMAT完成后输出什么
--x attr在扩展文件属性中存储元数据
-q如果用作第一个参数,则禁用.curlrc

使用示例

一、将页面内容保存进文件。

# 将百度首页的内容保存进"home.html"中。
[root@dayong root]# curl -o home.html http://www.baidu.com 
# 由于A/B下的文件名都是001,002...,201,下载下来的文件重名,这样,自定义出来下载下来的文件名,
# 就变成了这样:原来: A/001.JPG —-> 下载后: 001-A.JPG 原来: B/001.JPG ---> 下载后: 001-B.JPG

[root@dayong root]# curl -o #2_#1.jpghttp://cgi2.tky.3web.ne.jp/~{A,B}/[001-201].JPG

二、将页面内容保存进原始文件中。

# 下载的内容会被保存到1.jpg文件中
[root@dayong root]# curl -O http://www.example.com/1.jpg
# 正则的方式--下载screen1.jpg~screen10.jpg
[root@dayong root]# curl -O http://XXXXX/screen[1-10].jpg

三、模拟表单登录并保存cookie信息。

[root@dayong root]# curl -c ./cookie_c.txt -F log=aaaa -F pwd=12345 'http://www.XXXX.com/wp-login.php'

四、模拟表单信息,模拟登录,保存头信息。

# -c(小写)产生的cookie和-D里面的cookie是不一样的。
[root@dayong root]# curl -D ./cookie_D.txt -F log=aaaa -F pwd=******http://www.XXXX.com/wp-login.php

五、使用cookie文件。

[root@dayong root]# curl -b ./cookie_c.txt http://www.XXXX.com/wp-admin

六、断点续传,-C(大写)

[root@dayong root]# curl -C -O http://www.baidu.com/img/bdlogo.gif

七、数据传输

# 最好用登录页面测试,因为你传值过去后,curl回抓数据,你可以看到你传值有没有成功
[root@dayong root]# curl -d log=aaaa http://www.XXXX.com/wp-login.php

八、显示错误

[root@dayong root]# curl -f http://www.XXXX.com/asdf

curl: (22) The requested URL returned error: 404
[root@dayong root]# curl http://www.XXXX.com/asdf

<HTML><HEAD><TITLE>404,not found</TITLE>

九、伪造来源地址

# 有的网站会判断,请求来源地址,防止盗链。
[root@dayong root]# curl -e http://localhost http://www.XXXX.com/wp-login.php

十、使用代理地址访问

# 当我们经常用curl去搞人家东西的时候,人家会把你的IP给屏蔽掉的,这个时候,我们可以用代理
[root@dayong root]# curl -x 24.10.28.84:32779 -o home.htmlhttp://www.XXXX.com

[root@dayong root]# curl -x 代理服务器地址:端口 http://www.example.com

十一、分段下载

# 比较大的东西,我们可以分段下载
[root@dayong root]# curl -r 0-100 -o img.part1 http://www.XXXX.com/wp-content/uploads/2010/09/compare_varnish.jpg
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

  Dload  Upload   Total   Spent    Left  Speed

  100   101  100   101    0     0    105      0 --:--:-- --:--:-- --:--:--     0

[root@dayong root]# curl -r 100-200 -o img.part2 http://www.XXXX.com/wp-ontent/uploads/2010/09/compare_varnish.jpg
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

  Dload  Upload   Total   Spent    Left  Speed

  100   101  100   101    0     0     57      0  0:00:01  0:00:01 --:--:--     0

[root@dayong root]# curl -r 200- -o img.part3 http://www.XXXX.com/wp-content/uploads/2010/09/compare_varnish.jpg
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

  Dload  Upload   Total   Spent    Left  Speed

  100  104k  100  104k    0     0  52793      0  0:00:02  0:00:02 --:--:-- 88961

[root@dayong root]# ls |grep part | xargs du -sh
  4.0K    one.part1
  112K    three.part3
  4.0K    two.part2

# 用的时候cat一下就行了
[root@dayong root]# cat img.part* >img.jpg

十二、不显示下载进度信息

[root@dayong root]# curl -s -o aaa.jpg http://www.baidu.com/img/bdlogo.gif

十三、显示下载进度条

[root@dayong root]# curl  -0 http://www.baidu.com/img/bdlogo.gif     (以http1.0协议请求)

####################################################################### 100.0%

十四、通过ftp下载文件

[root@dayong root]# curl -u 用户名:密码 -O http://www.XXXX.com/demo/curtain/bbstudy_files/style.css

# 或者用下面的方式
[root@dayong root]# curl -O ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/style.css
[root@dayong root]# curl -O ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/style.css

十五、通过ftp上传

[root@dayong root]# curl -T test.sql ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/

[root@dayong root]# curl -T test.sql ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/

十六、模拟浏览器头

[root@dayong root]# curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txthttp://www.www.baidu.com

十七、GET、PUT、GET、POST

# 当发起http请求时,curl会默认发起GET请求,也可以"-X GET"方式指定。
[root@dayong root]# curl -X GET http://www.baidu.com

# 当使用POST请求方式,需要通过指定“-d”,向服务器传递数据。
[root@dayong root]# curl -X POST http://www.example.com/posts

# DELETE请求用于删除服务器端的数据。
[root@dayong root]# curl -X DELETE http://www.example.com/posts/1

# PUT请求用于修改服务器端的数据
[root@dayong root]# curl -X PUT http://www.example.com/posts/1

十八、HTTP认证

# Basic认证
[root@dayong root]# curl --basic  -u user:password http://www.example.com/posts/1

# Digest认证
[root@dayong root]# curl --digest -u user:password http://www.example.com/posts/1

# OAuth2认证
[root@dayong root]# curl -u clientId:clientSecret -X POST -d "username=test&password=test&grant_type=password&scope=read" http://www.example.com/oauth/token
[root@dayong root]# curl -H "Authorization: Bearer [bearer]" http://www.example.com/posts/1

十九、文件上传

假定文件上传的表单如下所示:

<form method="POST" enctype='multipart/form-data' action="upload.cgi">
    <input type=file name=upload>
    <input type=submit name=press value="OK">
</form>

可使用curl按如下方式上传文件:

[root@dayong root]# curl --form upload=@localfilename --form press=OK http://www.example.com

二十、输出详细的交互信息

[root@dayong root]# curl http://www.example.com --trace-ascii /dev/stdout

二十一、自动跳转

# 有的网址是自动跳转的。使用 -L 参数,curl 就会跳转到新的网址。
[root@dayong root]# curl -L www.sina.com

二十二、显示头信息

# -i 参数可以显示 http response 的头信息,连同网页代码一起。
# -I 参数则只显示 http response 的头信息。
[root@dayong root]# curl -I http://www.sina.com

高级发法

一、可以指定多个url,或者在花括号中指定url的多个部分。

[root@dayong root]# http://site.{one,two,three}.com

# 可以用中括号指定数字或字母序列。
[root@dayong root]# curl ftp://ftp.numericals.com/file[1-100].txt
[root@dayong root]# curl ftp://ftp.numericals.com/file[001-100].txt    (with leading zeros)
[root@dayong root]# curl ftp://ftp.letters.com/file[a-z].txt

# 可以指定多个序列。
[root@dayong root]# curl http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html

# 可以在命令行指定任意数量的url,curl会按指定顺序获取url的内容。
# 可以在一个范围内指定跳跃的步数。
[root@dayong root]# curl http://www.numericals.com/file[1-100:10].txt
[root@dayong root]# curl http://www.letters.com/file[a-z:2].txt

# 如果没有指定协议前缀,curl会尝试猜测协议。它默认会选择http协议,
# 但是当遇见常用的host名字时,会选择尝试其他协议。例如ftp.xxx.com,curl会尝试ftp协议。
最后修改:2020 年 10 月 11 日 05 : 52 PM
如果觉得我的文章对你有用,请随意赞赏