linux tools

cURL常用命令

2019-04-30  本文已影响8人  AlgoPeek

什么是cURL

cURLClient for URLs的缩写,是一个支持多种协议的数据传输命令行工具。支持的协议包括:DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET 和 TFTP。除了命令行工具外,还有一个与之配套且开源的libcurl库。

本文主要介绍cURL命令行工具的常用命令,这对我们在进行网站开发或自动化处理一些任务时非常有用。cURL命令一般内置到绝大部分操作系统中,以下所有用法均可以通过man curl查找。

获取网页

这个是最简单也是非常实用的用法,curl后直接跟url地址,如果成功返回的,会在控制台输出网页的内容。如:

$curl https://tools.ietf.org/html/rfc2616

下载单文件

上面的方法只能将URL的内容输出到控制台,如果我们想将一个URL资源下载到本地,使用-o, --output <file>参数:

$curl -o rfc2616.txt https://tools.ietf.org/html/rfc2616

也可以直接使用-O, --remote-name参数,该参数不需要指定文件,而是直接将URL资源下载到当前目录下:

$curl -O https://tools.ietf.org/html/rfc2616

当使用-o-O参数时,终端会显示当前下载的百分比、下载速率、下载时间、剩余时间等信息,如下:

我们也可以指定--progress-bar-#参数,需要展示当前下载百分比,如下:

curl -o rfc2616.txt -# https://tools.ietf.org/html/rfc2616

下载多文件

也可以同时下载多个文件,如:

$curl -o rfc2616.txt https://tools.ietf.org/html/rfc2616 -o rfc5741.txt https://tools.ietf.org/html/rfc5741

断点续传

如果我们在下载https://tools.ietf.org/html/rfc2616资源时中途中断,我们可以使用-C -告诉cURL自动从上次中断的地方开始下载:

$curl -O -C - https://tools.ietf.org/html/rfc2616

设置最大传输速率

使用--limit-rate <speed>设置最大传输速率,默认是bytes/second,也可以指定单位,kKmMgG,如--limit-rate 200K

$curl -O --limit-rate 200K https://tools.ietf.org/html/rfc2616

自动跳转

有时候,当我们请求一些URL时,会返回301或302,并在头Location中指定跳转的地址,我们可以使用-L--location参数完成自动跳转,如:

$curl -L www.sina.com

只获取头信息

有时候我们只想获取一个URL的头信息而忽略其消息体,可以使用-I--head,如:

$curl -I www.sina.com

设置请求头

使用-H, --header <header/@file>参数设置请求头,其格式为:-H 'X-Custom-Header: X-Custom-Value'。需要注意的是,如果想移除一个内置的请求头,Header值设置为空且需要带上冒号,如-H 'Host:';如果是设置一个内容为空的HeaderHeader值设置为空且后面带上分号,如-H 'X-Custom-Header;',看一个完整的例子:

$curl -H "Content-Type:application/json" http://example.com

设置cookie

使用-b, --cookie <data>参数设置cookie,其格式为:"NAME1=VALUE1; NAME2=VALUE2"。如果没有指定=,表示从文件中读取cooke。如果要保存服务器端返回的cookie,可以使用-c, --cookie-jar <filename>参数。

$curl -c cookies http://example.com

$curl -b cookies http://example.com

设置User-Agent

使用-A, --user-agent <name>参数设置UA:

$curl --user-agent "curl" http://example.com

设置Referer

使用-e, --referer <URL>设置referer,如:

$curl --referer http://www.example.com http://www.example.com

POST请求

使用-d, --data <data>参数设置POST请求的body数据,在网站开发中用的比较多的是POST application/x-www-form-urlencodedPOST application/json
1. POST application/x-www-form-urlencoded

$curl -d "param1=value1&param2=value2" -X POST http://www.example.com

等同于:

$curl -d "param1=value1&param2=value2" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://www.example.com

也可以从文件中加载数据,如:

$curl -d "@data.txt" -X POST http://www.example.com

2. POST application/json

$curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://www.example.com

也可以从文件中加载数据,如:

$curl -d "@data.json" -X POST http://www.example.com

HTTP基本认证

使用-u, --user <user:password>参数,指定用户名和密码在服务器进行认证:

$curl --user name:password example.com

更多参考

  1. http://www.ruanyifeng.com/blog/2011/09/curl.html

  2. https://curl.haxx.se/docs/httpscripting.html

  3. https://www.keycdn.com/support/popular-curl-examples

  4. https://gist.github.com/subfuzion/08c5d85437d5d4f00e58

上一篇 下一篇

猜你喜欢

热点阅读