wget 命令
wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
命令格式:
1. 下载单个文件
wget http://www.example.com/testfile.zip
下载的文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)
2. 下载并以不同的文件名保存
-
wget -O myfile.zip http://www.example.com/testfile.zip -
-O 自定义文件名 :重命名下载的文件
-
如果不指定"-O" 选项,wget默认会以 url 路径最后一个 "
3. 断点续传
-
wget -c http://www.example.com/testfile.zip -
-c :继续接着执行上次未下载完的任务
-
当下载的文件特别大或者网络原因,文件没有下载完连接就已经被断开,使用
wget默认重试20次连接下载文件,如果网络一直有问题下载可能失败。如果需要的话,你可以使用
--tries 增加重试次数。例如设置最多重试40次:wget --tries=40 http://www.example.com/testfile.zip
4. 后台下载
-
wget -b http://www.example.com/testfile.zip -
-b :以后台运行的方式下载
-
对于下载非常大的文件不能及时下载完时,可以进行后台下载。后台下载时会在当前下载目录下创建一个 "wget-log" 文件记录下载日志,可以使用
5. 带宽控制和下载配额
-
wget --limit-rate=下载速度 http://www.example.com/testfile.zip -
--limit-rate=下载速度 :限定不超过指定的下载速度。例如:--limit-rate=300k
-
当你执行wget的时候,它默认会占用全部可能的宽带下载,但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。
如果还需要限制下载配额,可使用选项 "
6. 多文件下载
-
wget -i url文件 -
-i url文件 :从指定文件获取要下载的URL地址
-
如果有多个url资源需要下载,那么可以先生成一个文件,把下载地址的url按行写入该文件,然后使用 "-i" 选项指定该文件就可以批量下载了
7. 密码认证下载
-
wget --http-user=USER --http-password=PASS http://www.example.com/testfile.zip -
--http-user=USER :设置 http 用户名为 USER -
--http-password=PASS :设置 http 密码为 PASS -
--ftp-user=USER :设置 ftp 用户名为 USER -
--ftp-password=PASS :设置 ftp 密码为 PASS
-
对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl
8. 递归下载
-
wget -r http://www.example.com/path1/path2/ -
-r :递归在下整个站点(www.example.com)资源 -
-nd :递归下载时不创建一层一层的目录,把所有的文件下载到当前目录;不指定该选项默认按照资源在站点位置创建相应目录 -
-np :递归下载时不搜索上层目录,只在当前路径path2下进行下载;不指定该选项默认搜素整个站点 -
-A 后缀名 :指定要下载文件的后缀名,多个后缀名之间使用逗号进行分隔 -
-R 后缀名 :排除要下载文件的后缀名,多个后缀名之间使用逗号进行分隔 -
-L :递归时不进入其它主机。不指定该选项的话,如果站点包含了外部站点的链接,这样可能会导致下载内容无限大
-
示例,只下载path2路径下的所有pdf和png文件,不创建额外目录全都保存在当前下载目录下:
wget -r -nd -np -A pdf,png http://www.example.com/path1/path2/
curl 命令
curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。
与wget类似的下载功能
1. 单个文件下载
-
curl [-o 自定义文件名|-O] http://www.example.com/index.html -
-o 自定义文件名 :把服务器响应输出到指定文件 -
-O :与-o 选项作用一样,区别在于以 url 路径最后一个"/"之后的部分作为文件名
-
如果这两个选项都不写,curl 默认会把服务器响应内容输出到终端
2. 断点续传
-
curl -O -C 偏移量 http://www.example.com/testfile.zip -
-C 偏移量 :从指定的偏移量处继续下载,偏移量以字节为单位
-
如果让curl自动推断出正确的续传位置可以使用 "
3. 带宽控制和下载配额
-
curl -O --limit-rate 下载速度 http://www.example.com/testfile.zip -
--limit-rate 下载速度 :限定不超过指定的下载速度。例:--limit-rate 500k -
--max-filesize 下载配额 :指定最大可下载文件大小
-
处理复杂的web请求
1. 自动跳转
-
curl -L http://www.example.com -
-L :自动跳转到重定向链接(Location)
-
有些链接访问时会自动跳转(响应状态码为3xx),
2. 显示响应头信息
-
curl -i http://www.example.com -
-i :输出包含响应头信息 -
-I :输出仅包含响应头信息,不包含响应内容
-
3. 显示通信过程
-
curl -v http://www.example.com -
-v :显示一次http通信的整个过程,包括端口连接和http request头信息
-
如果还需要查看额外的通信信息,还可以使用选项 "
4. 指定http请求方式
-
curl -X 请求方式 http://www.example.com/test -
-X 请求方式 :指定http请求方式(GET|POST|DELETE|PUT等)。默认是"GET"
-
5. 添加http请求头
-
curl -H 'kev:value' http://www.example.com/test -
-H 'kev:value' :添加http请求头。例:-H 'Content-Type:application/json'
-
添加多个请求头,
6. 传递请求参数
-
curl -X POST -d '参数' http://www.example.com/test -
-d '参数' :指定POST请求体。参数形式可以是 "k1=v1&k2=v2", 也可以是json串 -
--data-urlencode '参数' :与-d 相同,区别在于会自动将发送的数据进行 URL 编码
-
使用
参数较多时,可以下把参数数据保存到本地文本中,然后从文本中读取参数数据。例如:
curl -d '@requestData.txt' -H 'Content-Type:application/json' http://www.example.com/login
如果要以GET请求方式发送表单数据,可以直接把参数直接追加url之后。例如:
curl http://www.example.com/login?user=zhansan&password=123456
7. 文件上传
-
curl -F 'file=@文件' https://www.example.com/test -
-F 'file=@文件' :模拟http表单向服务器上传文件。更多参数形式:file=@文件;name1=value1;name2=value2
-
文件上传时
指定上传文件 MIME 类型。下面示例指定MIME类型为"image/png"
curl -F '[email protected];type=image/png' https://google.com/profile 指定上传文件名。下面示例中原始文件名为"photo.png",但是服务器接收到的文件名为 "me.png"
curl -F '[email protected];filename=me.png' https://google.com/profile
8. 设置来源网址
-
curl -e '源网址' https://www.example.com -
-e '源网址' 或--referer '源网址' :设置来源网址,即http请求头的Referer 字段。和-H 选项直接设置请求头 "Referer" 字段等效
-
9. 设置客户端用户代理
-
curl -A '代理信息' https://www.example.com -
-A '代理信息' 或--user-agent '代理信息' :设置客户端用户代理,即http请求头的User-Agent 字段。和-H 选项直接设置请求头 "User-Agent" 字段等效
-
将"User-Agent"改成 Chrome 浏览器,示例:
curl -A 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36' https://www.example.com 移出 "User-Agent" 请求头,示例:
curl -A '' https://www.example.com
10. 设置cookie
-
curl -b '参数' https://www.example.com -
-b '参数' 或--cookie '参数' :设置cookie参数。参数形式可以是key1=value1;key2=value2... ,也可以是一个文件 -
-c 文件 :把服务器响应的cookie信息写入到文件中
-
至于具体的cookie的值,可以从http response头信息的 "Set-Cookie" 字段中得到,可以保存服务器返回的cookie信息到文件,再用这文件作为下次请求的cookie信息,如下:
curl -c cookies.txt http://example.com curl -b cookies.txt http://example.com
11. 设置服务器认证的用户名和密码
-
curl -u 'user[:password]' https://www.example.com -
-u 'user[:password]' :设置服务器认证的用户名和密码。只有用户名时,执行curl后提示输入密码
-
wget与curl对比
wget 是一个独立的下载程序,无需额外的资源库,它也允许你下载网页中或是 FTP 目录中的任何内容, 能享受它超凡的下载速度,简单直接。
curl是一个多功能工具,是libcurl这个库支持的。它可以下载网络内容,但同时它也能做更多别的事情。
从用途方面,wget倾向于网络文件下载;curl倾向于网络接口调试,相当于一个图形界面的 PostMan 工具
参考文章:
http://www.ruanyifeng.com/blog/2011/09/curl.html