linux 命令之 curl

服务器

浏览数:88

2019-3-14

curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具。

它支持包括 HTTP、HTTPS、ftp等众多协议,还支持 POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。

常用选项

抓取页面信息

-o 将文件保存为命令行中指定的文件名的文件中
-O 使用URL中默认的文件名保存文件到本地

 # 将文件下载到本地并命名为 mygettext.html
curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html

# 将文件保存到本地并命名为gettext.html,后面的 url 可以写正则
curl -O http://www.gnu.org/software/gettext/manual/gettext.html

# -O -O 可以同时下载多个文件
# 不加这个选项会直接打印到标准输出

网页重定向

有些网页,比如 www.sina.com, 发生了跳转,直接 curl 的话无法获得网页源码,这时需要加 -L 选项

# 遇到重定向时,使用该选项可以将请求重定向到新的地址上
curl -L www.sina.com

断点续传

当 curl 网页时中途终端,可以使用 -C 选项来接着已经完成的下载,已经下载过的文件不会被重新下载。

# 当文件在下载完成之前结束该进程
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
##############             20.1%

$ curl -C -O http://www.gnu.org/software/gettext/manual/gettext.html
###############            21.1%

获得请求信息或通信过程

-i 显示 http response 的头信息,连同网页代码一起。
-I/--head 只显示 response 头部信息。
-v 显示一次http通信的整个过程,包括端口连接和http request头信息。
或者使用下面的命令获得更详细的通信过程:
curl --trace output.txt www.sina.com

发送表单信息

对于 GET 方法,由于参数数据在 url 上,因此,可以直接 curl,这也是 curl 默认方法。
对于其他方法,则需要使用 -X 选项进行指定,如 POST、DELETE 等。

$ curl -X POST --data "data=xxx" example.com

--data 等同于 -d,有以下几种用法:

-d @file # 将提交的参数放在文件里
-d "string" # 多参数形式为 xxx&xxx
--data "string"
--data-ascii "string"
--data-binary "string"
--data-urlencode "string # 含有特殊符号的需要进行 url 编码

伪造头部信息

-e/--referer <url> 选项可以伪造来源网址。

# 假装是从 http://www.google.com 页面跳转到目的页面的
$ curl --referer http://www.google.com http://man.linuxde.net

-A/--user-agent <string> 选项可以伪造 UA。

curl URL -A "Mozilla/5.0"

-H/--header 自定义头部信息

curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" <url>

-x/--proxy <host[:port]> 设置代理

设置 cookie

-b/--cookie <name=val/file> 选项用来设置 cookie 或者从指定文件中读取 cookie 信息发起 http 请求。

$ curl --cookie "name=xxx;pass=xxx" www.example.com

-c/--cookie-jar <file> 选项可以将 cookies 保存到指定文件。

用户认证

-u/--user <user[:password]> 进行 http/ftp 的认证

下载文件

$ curl -u name:password www.example.com
$ curl -O ftp://name:passwd@ip:port/demo/curtain/bbstudy_files/style.css  

上传文件

$ curl -T test.sql ftp://name:passwd@ip:port/demo/curtain/bbstudy_files/ 

限速与限额

--limit-rate <rate> 选项设置传输速度

curl URL --limit-rate 50k

--max-filesize <bytes> 选项设置最大下载的文件总量

curl URL --max-filesize bytes

参考

【1】 Linux curl 命令详解
【2】linux curl 命令详解,以及实例
【3】curl网站开发指南