原文链接:http://my.oschina.net/chihz/blog/96101

早上起床的时候看网易公开课,想下载到本地观看,于是就写了一个shell脚本,从页面抓取公开课的链接,然后下载到本地。顺便深入研究了一下curl工具的使用,以下是总结。

1. 资源另存为

利用curl 可以把url资源以指定的文件名另存为到本地

1 curl -o lesson0.mp4 http://60.2.157.160/mov.bn.netease.com/movieMP4/2012/3/F/F/S7S94H7FF.mp4

使用-O (大欧) 选项可以自动从url解析出文件名另存为到当前目录

1 curl -O http://60.2.157.160/mov.bn.netease.com/movieMP4/2012/3/F/F/S7S94H7FF.mp4

文件就会以S7S94H7FF.mp4 为文件名进行保存。但是如果执行:

1 curl -O http://www.sina.com.cn

那么就会产生错误:“Remote file name has no length!” 无法去解析文件名。

2. 查看Http响应头

通过 -I 参数可以只查看Http响应头

1 curl -I http://www.sina.com.cn

3. 强大的通配符支持

公开课的视频有很多,假设我们要全部下载,该怎么做?去循环?每次都去curl请求一次?就像这样:

1 for video in 1 2 3 4;
2 do
3 curl -o video${video}.mp4 http://xxx.com/video${video}.mp4
4 done

其实今天才发现只需要一条命令就能够搞定:

1 curl -o 'video#1.mp4' 'http://xxx.com/video[1-4].mp4'

这样就可以下载所有的视频,并且所有的视频都会依次以video1.mp4 video2.mp4...这样来在本地进行保存。

另外范围的通配符还支持前面置0的做法:

1 curl -O http://www.curltest.com/test[00-99].mp3

就会自动下载test00.mp3 到 test99.mp3

另外还可以指定步长:

1 curl -O http://www.curltest.com/test[00-99:2].mp3

嗯,感觉跟Python的range差不多吧。挺高端的。

除了表示范围的通配符,还可以提供词汇列表的通配:

1 curl -O http://www.urltest.com/{minzufeng,tante}.mp3

4. 自动跟踪重定向

如果curl请求的地址产生重定向,那么使用-L参数会自动重定向,比如:

1 curl -L http://www.sina.com

会自动重定向到www.sina.com.cn

5. 指定HTTP请求方式

可以使用-X参数来指定http的请求方式,默认的情况下curl发起的是GET请求。

curl -X POST 发起post请求

curl -X UPDATE 发起update请求

6. 自定义HTTP请求头:

cookie: --cookie "name1=XXX;name2=XXX" http://www.curltest.com

referer: --referer "<script>alert('I am admin, bitch!');</script>"

ua: --user-agent "<script>alert('I am admin, bitch!');</script>"

7. 提交Form表单

可以使用-F参数来提交form表单, -F参数允许有多个

curl -X post -F "name=chihz" -F "age=22" -F "headImg=@/home/samchi/images/mypic.jpg" http://curltest.com

其中 -F "headImg=@/home/samchi/images/mypic.jpg"  为文件上传。

8. 多进程下载

curl支持按照范围来进行文件下载,通过-r参数就可以实现:

1 curl -O -r'0-500' http://60.2.157.160/mov.bn.netease.com/movieMP4/2012/3/F/F/S7S94H7FF.mp4

这样就会下载文件的前500个byte, 如果一个大文件,我们可以通过先使用curl -I拿到Content-Length, 然后分配固定个进程,为每个进程制定一个下载的范围,这样就可以实现多进程下载,下载完毕之后再将每个进程下载的文件进行合并就可以。

for example:

01 #!/bin/bash
02 read -p"please input the target url:" target_url
03 read -p"please input the processor number:" ps_num
04 read -p"please input the target file name:" target_file_name
05 content_length=$(curl -I $target_url|grep 'Content-Length'|awk -F':' '{print$2}')
06 content_length=$(echo $content_length) #like trim function
07 echo "the content length is:$content_length"
08 part_size=$((content_length / ps_num))
09 echo "Part size is $part_size"
10 i=1
11 while [ $i -le "$ps_num" ];
12 do
13   begin=$(((i-1)*part_size))
14   end=$((i * part_size - 1))
15   if [ $i -eq $ps_num ];
16   then
17     end=$content_length
18   fi
19   i=$((i+1))
20   echo "begin:$begin"
21   echo "end:$end"
22   nohup curl -o "${target_file_name}_part_$i" -r "$begin-$end" "$target_url" &
23 done

不过这个最后还有个问题就是不能有个主进程去监控每个工作进程的完成情况,到时侯去自己合并数据,需要自己手工去合并,比如:

cat 1.txt 2.txt 3.txt > all.txt

另外发现http协议有很多东西需要自己去发掘,我觉着我应该去好好读读最近流行的那本HTTP权威指南了。

网页下载工具curl命令简介相关推荐

  1. [Shell学习笔记] 命令行下的高级网络工具cURL命令

    原文: http://www.1987.name/365.html Linux curl命令是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯 ...

  2. Linux curl命令简介

    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS ...

  3. 用 Python 实现一个网页下载工具

    几个月前,我完成了一次网络综合实验的课设,内容是要设计并实现一个网站下载程序.感觉里面有几个地方挺有意思的,于是在此记录下自己的思路,与大家分享. 实验要求 网站下载程序可以按照要求下载整个网站的网页 ...

  4. curl 命令行下载工具使用方法小结

    获取curl curl 命令行下载工具 curl的官方网站为:    http://curl.haxx.se    官方下载页面为:http://curl.haxx.se/download.html ...

  5. linux curl 命令 http请求、下载文件、ftp上传下载

    1. curl 命令简介 cURL(CommandLine Uniform Resource Locator),是一个利用 URL 语法,在命令行终端下使用的网络请求工具,支持 HTTP.HTTPS. ...

  6. Linux Curl命令教程

    目录 1.curl命令简介 2.curl命令语法和参数 3.curl基本用法介绍 4.curl的常见用法(项目应用) 1.curl命令简介 curl命令是利用URL规则在命令行下工作的文件传输工具,可 ...

  7. Linux中的wget命令与curl命令

    wget命令与curl命令都用来与服务器之间传输数据,有时候也用来测试网络连接. wget命令 概述 GNU Wget 是一个免费实用程序,用于从 Web 非交互式下载文件.它支持HTTP.HTTPS ...

  8. linux中下载文件的命令

    2019独角兽企业重金招聘Python工程师标准>>> 1 wget wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径 例如 ...

  9. CURL 命令行下载工具

     curl 是一个利用URL语法在命令行方式下工作的文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP. ...

最新文章

  1. Android之自定义横向滚动菜单
  2. 文本和代码文件助手软件
  3. Timus题目中测试数据数量的计算
  4. JavaScript基础05-day07【条件运算符、运算符优先级、代码块、if语句】
  5. delphi VCL研究之消息分发机制(转)
  6. 嗯?原来if可以调用方法的?
  7. HTML 5新增的元素
  8. 比较全的C语言面试题
  9. LeetCode 500. Keyboard Row
  10. 正则化、归一化含义解析(一)
  11. python 操作mysql_Python 操作MySQL
  12. 如何使用Service的Context弹出Dialog对话框,即全局性对话框
  13. 左列定宽,右列自适应
  14. Cocos2dx中利用双向链表实现无限循环滚动层
  15. 如何理解边沿触发器和脉冲触发器?
  16. 100层楼扔鸡蛋,最快速度找出,哪层是鸡蛋碎的临界点
  17. Android中Device Provisioned引起的问题分析
  18. Win10控制面板打不开怎么办?
  19. 【Python检测脚本】你知道朋友屏蔽你吗?你知道屏蔽别人的下场吗?(拉黑统统拉黑)
  20. 帝国CMS对接百度小程序实现文章自动收录的方法

热门文章

  1. Incorrect number of arguments for FUNCTION XXX
  2. Java静态编译技术:突破Java“冷启动”桎梏,实现启动性能“质”的飞跃
  3. edge隐私错误“你的连接不是专用连接”解决方案
  4. 奢潮自信即刻拥有,KOREANO ESSENTIAL春夏系列上市
  5. [最短路-Floyd][并查集]SSL P2344 刻录光盘
  6. 信用评分卡模型解决方案
  7. 金蝶k3显示加层服务器失败,金蝶k3提示:连接中间加密服务失败,请确认中间层加密服务已启动...
  8. keras:神经网络的中间层输出
  9. 划重点 iOS15正式发布, 全新的通知推送系统,你必须要知道
  10. 思维模型 Yerkes-Dodson法则(倒U形假说)