1、命令简介
curl:使用HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、DICT、TELNET、LDAP或FILE协议之一从服务器传输数据。(使用wget或FTP传输多个文件。)
2、命令用法
curl [options] [URL...]
3、命令描述
curl支持文件的上传和下载,包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征;做网页处理流程和数据检索自动化。
4、命令选项
选项 | 描 |
url | 一个或多个url将被依次获取。 多个url或url的部分可以通过在花括号内写部分集来指定, 如下所示: 一个或多个url将被依次获取。 多个url或url的部分可以通过在花括号内写部分集来指定, 如下所示: ftp://ftp.numericals.com/file[1-100].txt ftp://ftp.numericals.com/file[001-100].txt (with leading zeros) ftp://ftp.letters.com/file[a-z].txt |
-A "agent string" --user-agent "agent string" | 指定要发送到HTTP服务器的User-Agent字符串。 要对字符串中的空格进行编码, 请用单引号将字符串括起来。 这也可以通过-H,--header选项来设置。(HTTP) |
-b name=data --cookie name=data | 将数据作为cookie发送到HTTP服务器。 它应该是先前从服务器接收到的“Set-Cookie:”行的数据。 数据格式为“NAME1=VALUE1;NAME2 = VALUE2”。 |
-c filename --cookie-jar file name | 在完成操作后保存cookie到文件中。 curl写入以前从指定文件读取的所有cookie, 以及从远程服务器接收的所有cookie。 如果不知道cookie,则不会写入任何文件。 若要写入stdout, 请将文件名设置为单个破折号“-”。 |
--compressed | 用curl支持的一种算法(gzip)请求一个压缩响应, 并保存未压缩的文档。如果使用了这个选项, 并且服务器发送了一个不支持的编码, curl将报告一个错误。 |
-d @file -d "string" --data "string" | 用(HTTP) POST请求发送指定的数据, 与web浏览器的方式相同。 这将使用内容类型应用程序/x-www-form-urlencoded传递数据。 与-F相比,--form。 |
-d, --data 类似于 --data-ascii. 要post二进制数据,使用 --data-binary. | 要对表单字段的值进行url编码, 可以使用--data-urlencode。 多个日期选项将被合并在一起。 因此,使用'-d name=daniel -d skill= poor ' 会生成一个类似于'name=daniel&skill= poor'的参数。 如果数据以@开头,剩下的应该是包含该数据的文件名。 |
-F name=@file -F name=content --form name=content | 模拟用户按下提交按钮的已填写表单。 根据RFC 2388, 这将使用Content-Type multipart/form-data POST数据。 这可以上传二进制文件等。如果数据以@开头, 剩下的应该是文件名。要从文件中获取内容部分, 请在文件名前面加上符号<。 @和<之间的区别是, @使一个文件作为文件上传在post中被附加, 而<使一个文本字段并从一个文件中获取该文本字段的内容。 |
-k --insecure | 这个选项允许curl执行“不安全的”SSL连接和传输。 使用默认安装的CA证书包在安全模式下尝试所有SSL连接。 这使得所有被认为是“不安全的”连接都会失败, 除非使用-k,--insecure(SSL)。 |
--limit-rate speed | 指定最大传输速率。如果有一个有限的管道, 并且您希望传输不要使用整个带宽, 则此特性非常有用。给定的速度以字节/秒为单位测量, 除非添加后缀。添加'k'或'k'将计数为kilobytes/sec, 'm'或m' megabytes,而'g'或'g'则为gigabytes/sec。 例如:200K, 3m, 1G。指定最大传输速率。 如果有一个有限的管道, 并且希望传输不要使用整个带宽, 则此特性非常有用。给定的速度以字节/秒为单位测量, 除非添加后缀。添加'k'或'k'将计数为kilobytes/sec, 'm'或m' megabytes,而'g'或'g'则为gigabytes/sec。 例如,200K, 3m, 1G。 |
-m seconds --max-time seconds | |
-o file --output file | 将输出写入文件,而不是标准输出。 如果使用{}或[]来获取多个文档, 可以在文件说明符中使用'#'后跟一个数字。 该变量将被替换为正在获取的URL的当前字符串。 如: curl http://{one,two}.site.com -o "file_#1.txt" 或者使用以下几个变量:或者使用以下几个变量: curl http://{site,host}.host[1-5].com -o "#1_#2" 可以使用此选项的次数与拥有的url数量相同。 请参见--create-dirs选项动态创建本地目录。 指定'-'强制输出到标准输出。 |
-O --remote-name | 将输出写入本地文件,其名称与我们获得的远程文件类似。 (只使用远程文件的文件部分,该路径被切断。) 用于保存的远程文件名是从给定的URL中提取的, 没有其他内容。因此,文件将保存在当前工作目录中。 |
-s --silent | 安静模式。不要显示进度表或错误消息。 静音或安静模式。不要显示进度表或错误消息。 |
--trace-ascii file | 将所有传入和传出数据(包括描述性信息)的完整 跟踪转储到给定的输出文件。 使用“-”作为文件名将输出发送到stdout。 此选项将覆盖之前使用的-v、--verbose或--trace-ascii。 如果这个选项被多次使用, 最后一个选项将被使用。 |
-T file --upload-file file | 将指定的本地文件传输到远程URL。 PUT如果指定的URL中没有文件的部分, 则curl将附加本地文件名。 必须在最后一个目录上使用末尾/, 以真正向curl证明没有文件名, 否则curl会认为最后一个目录名是要使用的远程文件名 。使用文件名“-”来使用stdin。 可以在命令行上为每个URL指定一个-T。 每个-T + URL对指定上传的内容和上传的位置。 curl还支持-T参数的“globbing”, 这意味着你可以像这样将多个文件上传到一个URL: curl -T "{file1,file2}" http://www.example.com 或 curl -T "img[1-1000].png" ftp://ftp.example.com/upload/ |
-I --head | 只获取http报头!HTTP服务器有一个命令HEAD, 这个命令用来获取文档的头信息。当用于FTP或FILE文件时, curl只显示文件大小和最后修改时间。 |
-u user:password --user user:password | 用于服务器身份验证的用户名和密码。 重写-n,--netrc和--netrc-optional。 如果只输入用户名(不输入冒号), curl将提示输入密码。 如果您使用支持sspi的curl二进制文件并执行NTLM身份验证, 您可以通过指定一个冒号和这个选项: " -u:"来强制curl从您的环境中获取用户名和密码。 如果这个选项被多次使用,最后一个选项将被使用。 |
-w --write-out format | 在成功完成操作后,定义在标准输出中显示的额外信息。 格式是一个字符串, 可以包含混合了任意数量变量的纯文本。 格式字符串可以指定为“string”, 或者从指定为“@filename”的文件中读取, 从stdin中读取格式使用“@-”。 各种变量可能包含在格式中, 并将被curl(文件大小, ip地址等参阅man curl详细信息)取代。 使用\n输出换行符,使用\r输出回车符, 使用\t输出制表符。 |
-x host:port -x [protocol://][user:password@]proxyhost[:port] --proxy [protocol://][user:password@]proxyhost[:port] | 使用指定的HTTP代理。 如果未指定端口号, 则假定端口为1080。 |
-H "name: value" --header "name: value" | 添加header当得到一个网页。 可以指定任意数量的额外header。 |
-H "name:" --header "name:" | 删除协议头,删除内部header。 |
-L --location | 如果服务器报告请求的页面已经移动, 则遵循重定向(用Location:头和3XX响应代码表示) |
-v --verbose | 更详细的信息。对调试非常有用。 |
5、使用示例
1)将密码文件发送到服务器,其中'password'是form-field的名称,/etc/passwd将是输入:
$ curl -F password=@/etc/passwd www.mypasswords.com
2)访问网页并在终端中显示
$ curl http://www.zhihu.com
3)访问网页并显示标题信息
$ curl http://www.zhihu.com -i
4)请求网页并保存到文件
$ curl http://www.zhihu.com -0 zhihu.html
5)请求网页或其重定向目标
$ curl www.zhihu.com/creaor/
$ curl www.zhihu.com/creator/ --location
6)将数据传输速率限制为1千字节/秒
$ curl http://www.zhihu.com/ --limit-rate 1k -o unix.html
7)通过代理服务器下载
$ curl -x proxy.example.com:1080 http://www.zhihu.com/
8)将下载的数据写入到文件,必须使用文件的绝对地址
$ curl https://www.example.com/abc.txt --silent -O
9)访问需要登陆的页面时,可通过-u选项提供用户名和密码进行验证
$ curl -u root https://www.zhihu.com/
Enter host password for user 'root':