shell: wget、curl(libcurl)使用方法及其区别

wget 用法详解

http://linux.blogbus.com/logs/46636997.html

wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。它有以下功能和特点:
(1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了; 
  (2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件; 
  (3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能; 
  (4)设置方便简单;可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标; 
  (5)程序小,完全免费;程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多所谓的免费软件,但是,这些软件的广告却不是我们喜欢的; 

wget虽然功能强大,但是使用起来还是比较简单的,基本的语法是:wget [参数列表] URL。下面就结合具体的例子来说明一下wget的用法。 
1、下载整个http或者ftp站点。 
wget http://place.your.url/here 
这个命令可以将http://place.your.url/here 首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。 

wget -r http://place.your.url/here 
这个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。 

要是您想制作镜像站点,那么可以使用-m参数,例如:wget -m http://place.your.url/here 
这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。 

2、断点续传。 
当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget的断点续传是自动的,只需要使用-c参数,例如: 
wget -c http://the.url.of/incomplete/file 
使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。 

3、批量下载。 
如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:wget -i download.txt 
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页) 

4、选择性的下载。 
可以指定让wget只下载一类文件,或者不下载什么文件。例如: 
wget -m --reject=gif http://target.web.site/subdirectory 
表示下载http://target.web.site/subdirectory,但是忽略gif文件。--accept=LIST 可以接受的文件类型,--reject=LIST拒绝接受的文件类型。 

5、密码和认证。 
wget只能处理利用用户名/密码方式限制访问的网站,可以利用两个参数: 
--http-user=USER设置HTTP用户 
--http-passwd=PASS设置HTTP密码 
对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl。 

6、利用代理服务器进行下载。 
如果用户的网络需要经过代理服务器,那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个.wgetrc文件。文件中可以设置代理服务器: 
http-proxy = 111.111.111.111:8080 
ftp-proxy = 111.111.111.111:8080 
分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用: 
--proxy-user=USER设置代理用户 
--proxy-passwd=PASS设置代理密码 
这两个参数。 
使用参数--proxy=on/off 使用或者关闭代理。 
wget还有很多有用的功能,需要用户去挖掘。 

附录: 

命令格式: 
  wget [参数列表] [目标软件、网页的网址] 

  -V,--version 显示软件版本号然后退出; 
  -h,--help显示软件帮助信息; 
  -e,--execute=COMMAND 执行一个 ".wgetrc"命令 

  -o,--output-file=FILE 将软件输出信息保存到文件; 
  -a,--append-output=FILE将软件输出信息追加到文件; 
  -d,--debug显示输出信息; 
  -q,--quiet 不显示输出信息; 
  -i,--input-file=FILE 从文件中取得URL; 

  -t,--tries=NUMBER 是否下载次数(0表示无穷次) 
  -O --output-document=FILE下载文件保存为别的文件名 
  -nc, --no-clobber 不要覆盖已经存在的文件 
  -N,--timestamping只下载比本地新的文件 
  -T,--timeout=SECONDS 设置超时时间 
  -Y,--proxy=on/off 关闭代理 

-nd,--no-directories 不建立目录 
  -x,--force-directories 强制建立目录 

--http-user=USER设置HTTP用户 
  --http-passwd=PASS设置HTTP密码 
  --proxy-user=USER设置代理用户 
  --proxy-passwd=PASS设置代理密码 

-r,--recursive 下载整个网站、目录(小心使用) 
  -l,--level=NUMBER 下载层次 

-A,--accept=LIST 可以接受的文件类型 
  -R,--reject=LIST拒绝接受的文件类型 
  -D,--domains=LIST可以接受的域名 
  --exclude-domains=LIST拒绝的域名 
  -L,--relative 下载关联链接 
  --follow-ftp 只下载FTP链接 
  -H,--span-hosts 可以下载外面的主机 
  -I,--include-directories=LIST允许的目录 
  -X,--exclude-directories=LIST 拒绝的目录 

中文文档名在平常的情况下会被编码, 但是在 --cut-dirs 时又是正常的, 
wget -r -np -nH --cut-dirs=3 ftp://host/test/ 
测试.txt 
wget -r -np -nH -nd ftp://host/test/ 
%B4%FA%B8%D5.txt 
wget "ftp://host/test/*" 
%B4%FA%B8%D5.txt 

由於不知名的原因,可能是为了避开特殊档名, wget 会自动将抓取档名的部分用 encode_string 处理过, 所以该 patch 就把被 encode_string 处理成 "%3A" 这种东西, 用 decode_string 还原成 ":",并套用在目录与档案名称的部分,decode_string 是 wget 内建的函式。

wget -t0 -c -nH -x -np -b -m -P /home/sunny/NOD32view/  http://downloads1.kaspersky-labs.com/bases/ -o wget.log



linux curl 命令详解,以及实例

原:http://blog.51yip.com/linux/1049.html

libcurl编程介绍http://jianlee.ylinux.org/Computer/C/libcurl.html

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

一,curl命令参数,有好多我没有用过,也不知道翻译的对不对,如果有误的地方,还请指正。

  1. -a/--append 上传文件时,附加到目标文件  
  2.  -A/--user-agent <string>  设置用户代理发送给服务器  
  3.  - anyauth   可以使用“任何”身份验证方法  
  4.  -b/--cookie <name=string/file> cookie字符串或文件读取位置  
  5.  - basic 使用HTTP基本验证  
  6.  -B/--use-ascii 使用ASCII /文本传输  
  7.  -c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中  
  8.  -C/--continue-at <offset>  断点续转  
  9.  -d/--data <data>   HTTP POST方式传送数据  
  10.  --data-ascii <data>  以ascii的方式post数据  
  11.  --data-binary <data> 以二进制的方式post数据  
  12.  --negotiate     使用HTTP身份验证  
  13.  --digest        使用数字身份验证  
  14.  --disable-eprt  禁止使用EPRT或LPRT  
  15.  --disable-epsv  禁止使用EPSV  
  16.  -D/--dump-header <file> 把header信息写入到该文件中  
  17.  --egd-file <file> 为随机数据(SSL)设置EGD socket路径  
  18.  --tcp-nodelay   使用TCP_NODELAY选项  
  19.  -e/--referer 来源网址  
  20.  -E/--cert <cert[:passwd]> 客户端证书文件和密码 (SSL)  
  21.  --cert-type <type> 证书文件类型 (DER/PEM/ENG) (SSL)  
  22.  --key <key>     私钥文件名 (SSL)  
  23.  --key-type <type> 私钥文件类型 (DER/PEM/ENG) (SSL)  
  24.  --pass  <pass>  私钥密码 (SSL)  
  25.  --engine <eng>  加密引擎使用 (SSL). "--engine list" for list  
  26.  --cacert <file> CA证书 (SSL)  
  27.  --capath <directory> CA目录 (made using c_rehash) to verify peer against (SSL)  
  28.  --ciphers <list>  SSL密码  
  29.  --compressed    要求返回是压缩的形势 (using deflate or gzip)  
  30.  --connect-timeout <seconds> 设置最大请求时间  
  31.  --create-dirs   建立本地目录的目录层次结构  
  32.  --crlf          上传是把LF转变成CRLF  
  33.  -f/--fail          连接失败时不显示http错误  
  34.  --ftp-create-dirs 如果远程目录不存在,创建远程目录  
  35.  --ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用  
  36.  --ftp-pasv      使用 PASV/EPSV 代替端口  
  37.  --ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址  
  38.  --ftp-ssl       尝试用 SSL/TLS 来进行ftp数据传输  
  39.  --ftp-ssl-reqd  要求用 SSL/TLS 来进行ftp数据传输  
  40.  -F/--form <name=content> 模拟http表单提交数据  
  41.  -form-string <name=string> 模拟http表单提交数据  
  42.  -g/--globoff 禁用网址序列和范围使用{}和[]  
  43.  -G/--get 以get的方式来发送数据  
  44.  -h/--help 帮助  
  45.  -H/--header <line>自定义头信息传递给服务器  
  46.  --ignore-content-length  忽略的HTTP头信息的长度  
  47.  -i/--include 输出时包括protocol头信息  
  48.  -I/--head  只显示文档信息  
  49.  从文件中读取-j/--junk-session-cookies忽略会话Cookie  
  50.  - 界面<interface>指定网络接口/地址使用  
  51.  - krb4 <级别>启用与指定的安全级别krb4  
  52.  -j/--junk-session-cookies 读取文件进忽略session cookie  
  53.  --interface <interface> 使用指定网络接口/地址  
  54.  --krb4 <level>  使用指定安全级别的krb4  
  55.  -k/--insecure 允许不使用证书到SSL站点  
  56.  -K/--config  指定的配置文件读取  
  57.  -l/--list-only 列出ftp目录下的文件名称  
  58.  --limit-rate <rate> 设置传输速度  
  59.  --local-port<NUM> 强制使用本地端口号  
  60.  -m/--max-time <seconds> 设置最大传输时间  
  61.  --max-redirs <num> 设置最大读取的目录数  
  62.  --max-filesize <bytes> 设置最大下载的文件总量  
  63.  -M/--manual  显示全手动  
  64.  -n/--netrc 从netrc文件中读取用户名和密码  
  65.  --netrc-optional 使用 .netrc 或者 URL来覆盖-n  
  66.  --ntlm          使用 HTTP NTLM 身份验证  
  67.  -N/--no-buffer 禁用缓冲输出  
  68.  -o/--output 把输出写到该文件中  
  69.  -O/--remote-name 把输出写到该文件中,保留远程文件的文件名  
  70.  -p/--proxytunnel   使用HTTP代理  
  71.  --proxy-anyauth 选择任一代理身份验证方法  
  72.  --proxy-basic   在代理上使用基本身份验证  
  73.  --proxy-digest  在代理上使用数字身份验证  
  74.  --proxy-ntlm    在代理上使用ntlm身份验证  
  75.  -P/--ftp-port <address> 使用端口地址,而不是使用PASV  
  76.  -Q/--quote <cmd>文件传输前,发送命令到服务器  
  77.  -r/--range <range>检索来自HTTP/1.1或FTP服务器字节范围  
  78.  --range-file 读取(SSL)的随机文件  
  79.  -R/--remote-time   在本地生成文件时,保留远程文件时间  
  80.  --retry <num>   传输出现问题时,重试的次数  
  81.  --retry-delay <seconds>  传输出现问题时,设置重试间隔时间  
  82.  --retry-max-time <seconds> 传输出现问题时,设置最大重试时间  
  83.  -s/--silent静音模式。不输出任何东西  
  84.  -S/--show-error   显示错误  
  85.  --socks4 <host[:port]> 用socks4代理给定主机和端口  
  86.  --socks5 <host[:port]> 用socks5代理给定主机和端口  
  87.  --stderr <file>  
  88.  -t/--telnet-option <OPT=val> Telnet选项设置  
  89.  --trace <file>  对指定文件进行debug  
  90.  --trace-ascii <file> Like --跟踪但没有hex输出  
  91.  --trace-time    跟踪/详细输出时,添加时间戳  
  92.  -T/--upload-file <file> 上传文件  
  93.  --url <URL>     Spet URL to work with  
  94.  -u/--user <user[:password]>设置服务器的用户和密码  
  95.  -U/--proxy-user <user[:password]>设置代理用户名和密码  
  96.  -v/--verbose  
  97.  -V/--version 显示版本信息  
  98.  -w/--write-out [format]什么输出完成后  
  99.  -x/--proxy <host[:port]>在给定的端口上使用HTTP代理  
  100.  -X/--request <command>指定什么命令  
  101.  -y/--speed-time 放弃限速所要的时间。默认为30  
  102.  -Y/--speed-limit 停止传输速度的限制,速度时间'秒  
  103.  -z/--time-cond  传送时间设置  
  104.  -0/--http1.0  使用HTTP 1.0  
  105.  -1/--tlsv1  使用TLSv1(SSL)  
  106.  -2/--sslv2 使用SSLv2的(SSL)  
  107.  -3/--sslv3         使用的SSLv3(SSL)  
  108.  --3p-quote      like -Q for the source URL for 3rd party transfer  
  109.  --3p-url        使用url,进行第三方传送  
  110.  --3p-user       使用用户名和密码,进行第三方传送  
  111.  -4/--ipv4   使用IP4  
  112.  -6/--ipv6   使用IP6  
  113.  -#/--progress-bar 用进度条显示当前的传送状态  







































































wget 和 curl 区别(原:http://renyongjie668.blog.163.com/blog/static/1600531201032010432180/

参考资 料:http://daniel.haxx.se/docs/curl-vs-wget.html


晚上看了Linux下的curl和wget这两个工具,进行了比较和 学习。
它们的区别,我看到的有如下几点:
1.curl是libcurl这个库支持的,wget是一个纯粹的命令行命令。


2.curl 支持更多的协议。curl supports FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMTP and RTSP at the time of this writing. Wget supports HTTP, HTTPS and FTP.


3.curl默认支持 HTTP1.1(也支持1.0),而wget仅仅支持HTTP1.0规范。引用wget的man page中的一段话吧,Please be aware that Wget needs to know the size of the POST data in advance. It's not quite clear how to work around this limitation inherent in HTTP/1.0. Although HTTP/1.1 introduces chunked transfer that doesn't require knowing the request length in advance, a client can't use chunked unless it knows it's talking to an HTTP/1.1 server.  And it can't know that until it receives a response, which in turn requires the request to have been completed -- a chicken-and-egg problem.


4.curl在指定要下载的链接时能够 支持URL的序列或集合,而wget则不能这样;


5.wget支持递归下载,而curl则没有这个功能。(这是wget的一个主要好 处,wget也是有优势的,呵呵)

附:HTTP1.0和HTTP1.1的区别
看着它们的man page里面对HTTP支持的描述,我又了解到了一点HTTP1.0和HTTP1.1的区别,HTTP1.1中增加的持续性连接(Persist Connection)与块编码(Chunked Encoding)技术。
块传输编码(Chunked Transfer Coding)
块编码(chunked encoding)改变消息主体使消息主体(message body,译注:消息主体与实体主体是有区别的,后面章节将会介绍)成块发送。每一个块有它自己的大小(size)指示器,在所有的块之后会紧接着一个可 选的包含实体头域的尾部(trailer)。这允许发送端能动态生成内容,并能携带有用的信息,这些信息能让接收者判断消息是否接收完整。

为啥突然想到看这个呢,其实起因是下面所说的。
今天,看 到环境更新脚本中,添加了一段脚本,里面用到了curl这个工具。
这段shell程序如下:
curl http://svn.abcde.com/repos/abc/apps/smile/ -u abc:123456 -o dirname
base_url="http://svn.abcde.com/repos/abc/apps/smile"
while read LINE
      do
         if [ -z "$LINE" ]; then
              continue
         fi
         echo $LINE |grep "dir name"
         if [ $? -eq 1 ]; then
             continue
         fi
         dir=`echo $LINE |sed -e 's/<dir name="//g'|sed -e 's/".*//g'`
         svn_url=$base_url$dir/trunk
         svn co $svn_url $dir
      done <  dirname
这段代码是为了得到svn上的 smile目录上的所有目录名称,并将其拼装成svn_url,然后checkout这些url。
svn_url如下所 示:http://svn.abcde.com/repos/abc/apps/smile/aiscclient/
下载得到 的dirname这个文件内容如下:
  <!ELEMENT updir EMPTY>
  <!ELEMENT file  EMPTY>
  <!ATTLIST file  name    CDATA #REQUIRED
                  href    CDATA #REQUIRED>
  <!ELEMENT dir   EMPTY>
  <!ATTLIST dir   name    CDATA #REQUIRED
                  href    CDATA #REQUIRED>
]>
<svn version="1.6.2 (r37639)"
     href="http://subversion.tigris.org/">
  <index rev="267603" path="/apps/smile" base="abc">
    <updir />
    <dir name="aiscclient" href="aiscclient/" />
    <dir name="utm" href="utm/" />
    <dir name="uusubscribe" href="uusubscribe/" />
    <dir name="viewcache" href="viewcache/" />
    <dir name="wholesale" href="wholesale/" />
  </index>
</svn>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值