Linux curl 命令

Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。本文主要介绍Linux curl 命令。

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':
推荐阅读
cjavapy编程之路首页