Linux curl 命令详解

命令概要
该命令设计用于在没有用户交互的情况下工作 。
curl 是一个工具,用于传输来自服务器或者到服务器的数据 。「向服务器传输数据或者获取来自服务器的数据」
可支持的协议有(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、TELNET和TFTP) 。
curl提供了大量有用的技巧,比如代理支持、用户身份验证、FTP上传、HTTP post、SSL连接、cookie、文件断点续传、Metalink等等 。正如你将在下面看到的,这些特性的数量会让您头晕目眩!
 
访问的URL你可以在命令行上指定任意数量的url 。它们将按指定的顺序依次获取 。
你可以指定多个url,或url的部分通过在花括号内编写部分集,如:
1 http://site.{one,two,three}.com2 # 参见3 curl http://www.zhangblog.com/2019/06/16/hexo{04,05,06}/ -I# 查看信息 
或者可以使用[]得到字母数字序列的序列,如:
1 ftp://ftp.numericals.com/file[1-100].txt2 ftp://ftp.numericals.com/file[001-100].txt# 前导用零3 ftp://ftp.letters.com/file[a-z].txt 4 # 参见5 curl http://www.zhangblog.com/2019/06/16/hexo[04-06]/ -I# 查看信息 
不支持嵌套序列,但可以使用几个相邻的序列:
http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html 
你可以指定一个步长计数器的范围,以获得每第n个数字或字母:
http://www.numericals.com/file[1-100:10].txt http://www.letters.com/file[a-z:2].txt 
如果指定URL而没有protocol:// prefix,默认为HTTP 。
 
常用选项一curl通常在操作过程中显示一个进度表,显示传输的数据量、传输速度和估计的剩余时间等 。
-#, --progress-bar将curl进度显示为一个简单的进度条;而不是标准的、具有更多信息的进度表 。
1 [root@iZ28xbsfvc4Z 20190702]# curl -O http://www.zhangblog.com/2019/06/16/hexo04/index.html# 默认的进度表2%Total%Received% XferdAverageSpeedTimeTimeTimeCurrent3DloadUploadTotalSpentLeftSpeed4 100972991009729900186k0 --:--:-- --:--:-- --:--:--186k5 [root@iZ28xbsfvc4Z 20190702]# 6 [root@iZ28xbsfvc4Z 20190702]# curl -# -O http://www.zhangblog.com/2019/06/16/hexo04/index.html#简单的进度条7 ######################################################################## 100.0% 
-0, --http1.0(HTTP)强制curl使用HTTP 1.0发出请求,而不是使用其内部首选的HTTP 1.1 。
-1, --tlsv1(SSL)强制curl使用TLS 1.x 版本,当与远程TLS服务进行协商时 。可以使用选项 --tlsv1.0、--tlsv1.1和 --tlsv1.2来更精确地控制TLS版本(如果使用的SSL后端支持这种级别的控制) 。
-2, --sslv2(SSL)强制curl使用TLS 2 版本,当与远程TLS服务进行协商时 。
-3, --sslv3(SSL)强制curl使用TLS 3 版本,当与远程TLS服务进行协商时 。
-4, --ipv4如果curl能够将一个地址解析为多个IP版本(比如它支持ipv4和ipv6),那么这个选项告诉curl只将名称解析为IPv4地址 。
-6, --ipv6如果curl能够将一个地址解析为多个IP版本(比如它支持ipv4和ipv6),那么这个选项告诉curl只将名称解析为IPv6地址 。
-a, --Append(FTP/SFTP)当在上传中使用时,这将告诉curl追加到目标文件而不是覆盖它 。如果文件不存在,将创建它 。注意,一些SSH服务器(包括OpenSSH)会忽略此标志 。
-A, --user-agent <agent string>(HTTP)指定要发送到HTTP服务端的User-Agent字符串 。当然也可以使用 -H, --header 选项来设置 。用于模拟客户端,如:谷歌浏览器、火狐浏览器、IE 浏览器等等 。
如果多次使用此选项,则将使用最后一个选项 。
模仿浏览器访问
curl -A "Mozilla/5.0 (windows NT 10.0; Win64; x64) Chrome/75.0.3770.999" http://www.zhangblog.com/2019/06/24/domainexpire/ 
--basic(HTTP)告诉curl使用HTTP基本身份验证 。这是默认的 。
 
常用选项二-b, --cookie <name=data>(HTTP)将数据作为cookie传递给HTTP服务器 。它应该是之前从服务端接收到的“Set-Cookie:”行中的数据 。数据格式为“NAME1=VALUE1;NAME2 = VALUE2” 。
如果行中没有使用 ‘=’ 符号,则将其视为一个文件名,用于读取先前存储的cookie行,如果它们匹配,则应在此会话中使用 。要读取cookie文件的文件格式应该是纯HTTP头文件或Netscape/Mozilla cookie文件格式 。
注意:使用 -b, --cookie 指定的文件仅用作输入 。文件中不会存储cookies 。要存储cookies,可以使用 -c, --cookie-jar 选项,或者您甚至可以使用 -D, --dump-header 将HTTP头保存到文件中 。
-c, --cookie-jar <file name>(HTTP)指定希望curl在完成操作后将所有cookie写入哪个文件 。Curl写之前从指定文件读取的所有cookie,以及从远程服务端接收的所有cookie 。如果没有已知的cookie,则不会写入任何文件 。该文件将使用Netscape cookie文件格式编写 。如果你将文件名设置为单个破折号 “-”,cookie将被标准输出 。


推荐阅读