在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。

语法 curl [option] [url]

-A/--user-agent <string>              设置用户代理发送给服务器
-b/--cookie <name=string/file> cookie字符串或文件读取位置
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue-at <offset> 断点续转
-D/--dump-header <file> 把header信息写入到该文件中
-e/--referer 来源网址
-f/--fail 连接失败时不显示http错误
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-r/--range <range> 检索来自HTTP/.1或FTP服务器字节范围
-s/--silent 静音模式。不输出任何东西
-T/--upload-file <file> 上传文件
-u/--user <user[:password]> 设置服务器的用户和密码
-w/--write-out [format] 什么输出完成后
-x/--proxy <host[:port]> 在给定的端口上使用HTTP代理
-#/--progress-bar 进度条显示当前的传送状态
-i/--include 输出时包括protocol头信息
-I/--head 只显示文档信息
-X/--request <command> 指定什么命令
-G/--get 以get的方式来发送数据
-H/--header <line> 自定义头信息传递给服务器
-L 重定向连接

1.基本用法

curl https://www.baidu.com

2.curl -I选项,只显示http头,而不显示文件内容

curl -I https://www.baidu.com

HTTP/1.1  OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length:
Content-Type: text/html
Date: Mon, Dec :: GMT
Etag: "575e1f8a-115"
Last-Modified: Mon, Jun :: GMT
Pragma: no-cache
Server: bfe/1.0.8.18

如果想同时显示HTTP头和文件内容,使用-i选项

curl -i https://www.baidu.com

3.curl -o将结果保存到文件,也可使用重定向

-o(小写的 o):结果会被保存到命令行中提供的文件名 
-O(大写的 O):URL 中的文件名会被用作保存输出的文件名
curl -o baidu.html https://www.baidu.com
curl -O http://www.gnu.org/software/gettext/manual/gettext.html

注意:使用 -O 选项时,必须确保链接末尾包含文件名,否则 curl 无法正确保存文件。如果遇到链接中无文件名的情况,应该使用 -o 选项手动指定文件名,或使用重定向符号,例如上述文件的gettext.html

如 curl -O https://www.baidu.com 会报错
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
换成 curl -O https://www.baidu.com/index.html 就能正常的获取到内容
 
如同时下载多个文件
curl -O https://www.baidu.com/index.html -O https://news.qq.com/a/20181224/008767.htm
或者 curl -o baidu.html https://www.baidu.com/index.html -o tengxun.html https://news.qq.com/a/20181224/008767.htm

4.使用-L跟随链接重定向

如果直接使用 curl 打开某些被重定向后的链接,这种情况下就无法获取我们想要的网页内容。例如

curl  https://baidu.com

<html>
<head><title> Found</title></head>
<body bgcolor="white">
<center><h1> Found</h1></center>
<hr><center>bfe/1.0.8.18</center>
</body>
</html>
而当我们通过浏览器打开该链接时,会自动跳转到 http://www.baidu.com。此时我们想要 curl 做的,就是像浏览器一样跟随链接的跳转,获取最终的网页内容。我们可以在命令中添加 -L 选项来跟随链接重定向:
 
5.curl -A 自定义User-Agent
火狐浏览器
curl -A "Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0" http://www.baidu.com
chrome浏览器
curl -A 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' https://www.baidu.com

6.curl -H自定义header

curl -H "Referer: www.example.com" https://www.baidu.com

7.curl -c保存cookie

curl -c "cookie-example" https://www.baidu.com

8.curl -b 读取cookie

curl -b "cookie-example" https://www.baidu.com

9.curl -c断点续传

# 当文件在下载完成之前结束该进程
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
# ############## 20.1% # 通过添加-C选项继续对该文件进行下载,已经下载过的文件不会被重新下载
curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html
# ############### 21.1%

10.--limit-rate限速

curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

11.分块下载

有时候下载的东西会比较大,这个时候我们可以分段下载。使用内置option:-r

curl -r - -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG
curl -r - -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG
curl -r - -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG
cat dodo1_part* > dodo1.JPG

12.curl -d 发送post请求

POST 请求,-d 用于指定发送的数据,-X 用于指定发送数据的方式:

curl -d "userName=tom&passwd=123456" -X POST http://www.example.com/login

在使用 -d 的情况下,如果省略 -X,则默认为 POST 方式:

curl -d "userName=tom&passwd=123456" http://www.example.com/login

发送数据时,不仅可以使用 POST 方式,也可以使用 GET 方式,例如:

curl -d "somedata" -X GET http://www.example.com/api

或者使用 -G 选项:

curl -d "somedata" -G http://www.example.com/api
带 Cookie 登录 
当然,如果我们再次访问该网站,仍然会变成未登录的状态。我们可以用之前提到的方法保存 Cookie,在每次访问网站时都带上该 Cookie 以保持登录状态。 
curl -c “cookie-login” -d “userName=tom&passwd=” http://www.example.com/login 

再次访问该网站时,使用以下命令:

curl -b “cookie-login” http://www.example.com/login 

这样,就能保持访问的是登录后的页面了。

shell学习(6)- curl的更多相关文章

  1. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  2. shell学习总结之自定义函数

    shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...

  3. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  4. shell学习指南-阅读笔记

    shell学习指南真不是刚开始学习shell应该看得书,虽然其中讲了简单的linux命令,shell语法等,但是每章也有些深入和生僻地方,我想如果我刚学shell看到这样的地方一定会头疼的要死.或许也 ...

  5. 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等

    1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...

  6. Shell学习之结合正则表达式与通配符的使用(五)

    Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...

  7. Shell学习之条件测试(四)

    Shell学习之条件测试 目录 逻辑测试 文件测试 数值比较 字符串比较 逻辑测试 格式: [ 表达式 ] 操作符 [ 表达式2 ] …… 命令1 操作符 命令2 …… 常用的操作符 ( 注意:-a和 ...

  8. Shell学习之环境变量配置文件(三)

    Shell学习之环境变量配置文件 目录 环境变量配置文件简介 环境变量配置文件作用 其他配置文件和登录信息 环境变量配置文件简介 环境变量配置文件简介 环境变量配置文件中主要是定义对系统操作环境生效的 ...

  9. Shell学习之Bash变量详解(二)

    Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...

  10. Shell学习之Shell特性(一)

    Shell学习之Shell特性 目录 命令和文件自动补齐功能 命令历史记忆功能 history.上下键.!number.!string.!$.!! 别名功能 alias.unalias cp.~use ...

随机推荐

  1. animation steps属性实现帧动画

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...

  2. TensorFlow 图像预处理(一) 图像编解码,图像尺寸调整

    from: https://blog.csdn.net/chaipp0607/article/details/73029923 TensorFlow提供了几类图像处理函数,下面介绍图像的编码与解码,图 ...

  3. 编译Thrift

    按照 https://syslint.com/blog/tutorial/how-to-install-apache-thrift-on-ubuntu-14-04/ 进行, 编译时出现错误 make[ ...

  4. 本机连接调试Erlang结点与rebar3编译

    今天需要实时查看目标结点上的相关信息,于是查阅了关于远程Shell使用的资料,最终采用JCL的方式与本机上的erlang结点交互.在使用erl shell时需要指定目标结点的cookie以及当前结点名 ...

  5. 工艺(SAM)

    传送门 用SAM可以非常轻松的解决问题. 只要把原串向SAM中插入两次,之后直接从\(t_0\)状态开始每次贪心跑最小就可以了. 因为这个题要用map,所以之前取begin即可. // luogu-j ...

  6. C++之引用&的详解

    C++中的引用: 引用引入了对象的一个同义词.定义引用的表示方法与定义指针相似,只是用&代替了*.引用(reference)是c++对c语言的重要扩充.引用就是某一变量(目标)的一个别名,对引 ...

  7. 创建calico网络报错client response is invalid json

    使用docker创建calico网络失败. # docker network create --driver calico --ipam-driver calico-ipam testcalico E ...

  8. Java创建对象解释

    创建对象包括两个步骤,首先为对象声明,然后为对象分配内存. (1)对象声明 格式:类名 对象名: 这里只是声明了对象,但该对象并不能够使用,原因为未分配内存空间. (2)为对象分配内存 格式:new ...

  9. 用于生成交易统计时间戳(常配合echarts走势图使用)

    <?php //获取交易统计时间戳 时间段内每小时 public function getPayCountTimeHours($start_date,$end_date){ $data = ar ...

  10. 3.7-3.10 Hive 企业使用优化1

    一.Fetch Task 在执行hive代码的时候,一条简单的命令大部分都会转换成为mr代码在后台执行, 但是有时候我们仅仅只是想获取一部分数据而已,仅仅是获取数据,还需要转化成为mr去执行吗? 那个 ...