在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. github 版本控制 android studio

    注:本教程实验于android studio 3.1.2 1.下载git :https://gitforwindows.org/   安装 git. 2.配置git 3.配置github 4.上传项目 ...

  2. BZOJ_2438_[中山市选2011]杀人游戏 _强连通分量

    BZOJ_2438_[中山市选2011]杀人游戏 _强连通分量 Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人 ...

  3. codevs 1147 排座椅

    传送门 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接 ...

  4. OpenCV在Zedboard上的移植

    OpenCV编译 本文的前提是zynq交叉编译环境设置 下载opencv3.1.0源码,并解压 wget https://github.com/Itseez/opencv/archive/3.1.0. ...

  5. 全民nib

    1.为任何组件创建nib文件 那么如何通过XIB来创建自己的个性化的class呢. 1.Add----New Filss---Cocoa Touch Classes---Object-C  Class ...

  6. web缓存概述

    缓存无处不在,所展示出的仅仅是服务器端的缓存,我们从细节层面一层层分析 但是在此之前,我们先要知道什么是缓存与为什么要使用缓存,是时候百度一波喽~ 缓存就是数据交换的缓冲区(称作Cache),当某一硬 ...

  7. 创建cube 维度层次

    http://blog.programmingsolution.net/ssas-2008/period-dimension-time-dimension-creation-with-year-mon ...

  8. Struts文件上传下载

    Struts配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PU ...

  9. Unity4.0配置

    关于Unity4.0的使用: 一 安装Unity 在程序包管理器控制台输入命令:Istall-Pckage unity.mvc安装后会在App_Start中生成UnityConfig.cs 和Unit ...

  10. Flutter实战视频-移动电商-44.详细页_首屏自定义Widget编写

    44.详细页_首屏自定义Widget编写 把详细页的图片.标题.编号和价格形成一个单独的widget去引用 详情页的顶部单独封装个插件 在pages下面新建detials_page的文件件并在里面新建 ...