• windows中用命令行实现http下载网络文件


    使用第三方命令行工具curl.exe或者wget.exe

    一、curl.exe下载

    @echo off
    ::curl "http://46603.ys168.com/Limit.aspx?dlmc=46603&cs=2" > page.txt
    
    ::不会显示下载进度信息
    curl -s -o D:Downloadsdodo1.jpg http://ys168.com/images/ys_welcome.jpg
    
    pause 

    二、wget.exe下载

    @echo off
    
    ::不会显示下载进度信息
    wget -q -O D:Downloadswget--jpeg.jpg http://ys168.com/images/ys_welcome.jpg
    
    pause

    =====详细说明======

    curl语法

    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称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.1或FTP服务器字节范围
    -s/--silent                                    静音模式。不输出任何东西
    -T/--upload-file <file>                  上传文件
    -u/--user <user[:password]>      设置服务器的用户和密码
    -w/--write-out [format]                什么输出完成后
    -x/--proxy <host[:port]>              在给定的端口上使用HTTP代理
    -#/--progress-bar                        进度条显示当前的传送状态

    例子:
    1、基本用法

    # curl http://www.linux.com

    执行后,www.linux.com 的html就会显示在屏幕上了
    Ps:由于安装linux的时候很多时候是没有安装桌面的,也意味着没有浏览器,因此这个方法也经常用于测试一台服务器是否可以到达一个网站

    2、保存访问的网页
    2.1:使用linux的重定向功能保存

    # curl http://www.linux.com >> linux.html

    2.2:可以使用curl的内置option:-o(小写)保存网页

    $ curl -o linux.html http://www.linux.com

    执行完成后会显示如下界面,显示100%则表示保存成功

    % Total    % Received % Xferd  Average Speed  Time    Time    Time  Current
                                    Dload  Upload  Total  Spent    Left  Speed
    100 79684    0 79684    0    0  3437k      0 --:--:-- --:--:-- --:--:-- 7781k

    2.3:可以使用curl的内置option:-O(大写)保存网页中的文件
    要注意这里后面的url要具体到某个文件,不然抓不下来

    # curl -O http://www.linux.com/hello.sh

    3、测试网页返回值

    # curl -o /dev/null -s -w %{http_code} www.linux.com

    Ps:在脚本中,这是很常见的测试网站是否正常的用法

    4、指定proxy服务器以及其端口
    很多时候上网需要用到代理服务器(比如是使用代理服务器上网或者因为使用curl别人网站而被别人屏蔽IP地址的时候),幸运的是curl通过使用内置option:-x来支持设置代理

    # curl -x 192.168.100.100:1080 http://www.linux.com

    5、cookie
    有些网站是使用cookie来记录session信息。对于chrome这样的浏览器,可以轻易处理cookie信息,但在curl中只要增加相关参数也是可以很容易的处理cookie
    5.1:保存http的response里面的cookie信息。内置option:-c(小写)

    # curl -c cookiec.txt  http://www.linux.com

    执行后cookie信息就被存到了cookiec.txt里面了

    5.2:保存http的response里面的header信息。内置option: -D

    # curl -D cookied.txt http://www.linux.com

    执行后cookie信息就被存到了cookied.txt里面了

    注意:-c(小写)产生的cookie和-D里面的cookie是不一样的。


    5.3:使用cookie
    很多网站都是通过监视你的cookie信息来判断你是否按规矩访问他们的网站的,因此我们需要使用保存的cookie信息。内置option: -b

    # curl -b cookiec.txt http://www.linux.com

    6、模仿浏览器
    有些网站需要使用特定的浏览器去访问他们,有些还需要使用某些特定的版本。curl内置option:-A可以让我们指定浏览器去访问网站

    # curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com

    这样服务器端就会认为是使用IE8.0去访问的

    7、伪造referer(盗链)
    很多服务器会检查http访问的referer从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了
    curl中内置option:-e可以让我们设定referer

    # curl -e "www.linux.com" http://mail.linux.com

    这样就会让服务器其以为你是从www.linux.com点击某个链接过来的

    8、下载文件
    8.1:利用curl下载文件。
    #使用内置option:-o(小写)

    # curl -o dodo1.jpg http:www.linux.com/dodo1.JPG

    #使用内置option:-O(大写)

    # curl -O http://www.linux.com/dodo1.JPG

    这样就会以服务器上的名称保存文件到本地

    8.2:循环下载
    有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样

    # curl -O http://www.linux.com/dodo[1-5].JPG

    这样就会把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来

    8.3:下载重命名

    # curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG

    由于下载的hello与bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下载的会把第一次下载的覆盖,这样就需要对文件进行重命名。

    # curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG

    这样在hello/dodo1.JPG的文件下载下来就会变成hello_dodo1.JPG,其他文件依此类推,从而有效的避免了文件被覆盖

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

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

    这样就可以查看dodo1.JPG的内容了

    8.5:通过ftp下载文件
    curl可以通过ftp下载文件,curl提供两种从ftp中下载的语法

    # curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG
    # curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG

    8.6:显示下载进度条

    # curl -# -O http://www.linux.com/dodo1.JPG

    8.7:不会显示下载进度信息

    # curl -s -O http://www.linux.com/dodo1.JPG

    9、断点续传
    在windows中,我们可以使用迅雷这样的软件进行断点续传。curl可以通过内置option:-C同样可以达到相同的效果
    如果在下载dodo1.JPG的过程中突然掉线了,可以使用以下的方式续传

    # curl -C -O http://www.linux.com/dodo1.JPG

    10、上传文件
    curl不仅仅可以下载文件,还可以上传文件。通过内置option:-T来实现

    # curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/

    这样就向ftp服务器上传了文件dodo1.JPG

    11、显示抓取错误

    # curl -f http://www.linux.com/error

    其他参数(此处翻译为转载):

    -a/--append                        上传文件时,附加到目标文件
    --anyauth                            可以使用“任何”身份验证方法
    --basic                                使用HTTP基本验证
    -B/--use-ascii                      使用ASCII文本传输
    -d/--data <data>                  HTTP POST方式传送数据
    --data-ascii <data>            以ascii的方式post数据
    --data-binary <data>          以二进制的方式post数据
    --negotiate                          使用HTTP身份验证
    --digest                        使用数字身份验证
    --disable-eprt                  禁止使用EPRT或LPRT
    --disable-epsv                  禁止使用EPSV
    --egd-file <file>              为随机数据(SSL)设置EGD socket路径
    --tcp-nodelay                  使用TCP_NODELAY选项
    -E/--cert <cert[:passwd]>      客户端证书文件和密码 (SSL)
    --cert-type <type>              证书文件类型 (DER/PEM/ENG) (SSL)
    --key <key>                    私钥文件名 (SSL)
    --key-type <type>              私钥文件类型 (DER/PEM/ENG) (SSL)
    --pass  <pass>                  私钥密码 (SSL)
    --engine <eng>                  加密引擎使用 (SSL). "--engine list" for list
    --cacert <file>                CA证书 (SSL)
    --capath <directory>            CA目   (made using c_rehash) to verify peer against (SSL)
    --ciphers <list>                SSL密码
    --compressed                    要求返回是压缩的形势 (using deflate or gzip)
    --connect-timeout <seconds>    设置最大请求时间
    --create-dirs                  建立本地目录的目录层次结构
    --crlf                          上传是把LF转变成CRLF
    --ftp-create-dirs              如果远程目录不存在,创建远程目录
    --ftp-method [multicwd/nocwd/singlecwd]    控制CWD的使用
    --ftp-pasv                      使用 PASV/EPSV 代替端口
    --ftp-skip-pasv-ip              使用PASV的时候,忽略该IP地址
    --ftp-ssl                      尝试用 SSL/TLS 来进行ftp数据传输
    --ftp-ssl-reqd                  要求用 SSL/TLS 来进行ftp数据传输
    -F/--form <name=content>        模拟http表单提交数据
    -form-string <name=string>      模拟http表单提交数据
    -g/--globoff                    禁用网址序列和范围使用{}和[]
    -G/--get                        以get的方式来发送数据
    -h/--help                      帮助
    -H/--header <line>              自定义头信息传递给服务器
    --ignore-content-length        忽略的HTTP头信息的长度
    -i/--include                    输出时包括protocol头信息
    -I/--head                      只显示文档信息
    -j/--junk-session-cookies      读取文件时忽略session cookie
    --interface <interface>        使用指定网络接口/地址
    --krb4 <level>                  使用指定安全级别的krb4
    -k/--insecure                  允许不使用证书到SSL站点
    -K/--config                    指定的配置文件读取
    -l/--list-only                  列出ftp目录下的文件名称
    --limit-rate <rate>            设置传输速度
    --local-port<NUM>              强制使用本地端口号
    -m/--max-time <seconds>        设置最大传输时间
    --max-redirs <num>              设置最大读取的目录数
    --max-filesize <bytes>          设置最大下载的文件总量
    -M/--manual                    显示全手动
    -n/--netrc                      从netrc文件中读取用户名和密码
    --netrc-optional                使用 .netrc 或者 URL来覆盖-n
    --ntlm                          使用 HTTP NTLM 身份验证
    -N/--no-buffer                  禁用缓冲输出
    -p/--proxytunnel                使用HTTP代理
    --proxy-anyauth                选择任一代理身份验证方法
    --proxy-basic                  在代理上使用基本身份验证
    --proxy-digest                  在代理上使用数字身份验证
    --proxy-ntlm                    在代理上使用ntlm身份验证
    -P/--ftp-port <address>        使用端口地址,而不是使用PASV
    -Q/--quote <cmd>                文件传输前,发送命令到服务器
    --range-file                    读取(SSL)的随机文件
    -R/--remote-time                在本地生成文件时,保留远程文件时间
    --retry <num>                  传输出现问题时,重试的次数
    --retry-delay <seconds>        传输出现问题时,设置重试间隔时间
    --retry-max-time <seconds>      传输出现问题时,设置最大重试时间
    -S/--show-error                显示错误
    --socks4 <host[:port]>          用socks4代理给定主机和端口
    --socks5 <host[:port]>          用socks5代理给定主机和端口
    -t/--telnet-option <OPT=val>    Telnet选项设置
    --trace <file>                  对指定文件进行debug
    --trace-ascii <file>            Like --跟踪但没有hex输出
    --trace-time                    跟踪/详细输出时,添加时间戳
    --url <URL>                    Spet URL to work with
    -U/--proxy-user <user[:password]>  设置代理用户名和密码
    -V/--version                    显示版本信息
    -X/--request <command>          指定什么命令
    -y/--speed-time                放弃限速所要的时间。默认为30
    -Y/--speed-limit                停止传输速度的限制,速度时间'
    -z/--time-cond                  传送时间设置
    -0/--http1.0                    使用HTTP 1.0
    -1/--tlsv1                      使用TLSv1(SSL)
    -2/--sslv2                      使用SSLv2的(SSL)
    -3/--sslv3                      使用的SSLv3(SSL)
    --3p-quote                      like -Q for the source URL for 3rd party transfer
    --3p-url                        使用url,进行第三方传送
    --3p-user                      使用用户名和密码,进行第三方传送
    -4/--ipv4                      使用IP4
    -6/--ipv6                      使用IP6

    wget语法

    使用方法:
    wget的使用形式是:
    wget [参数列表] URL
    首先来介绍一下wget的主要参数:
    · -b:让wget在后台运行,记录文件写在当前目录下"wget-log"文件中;
    · -t [nuber of times]:尝试次数,当wget无法与服务器建立连接时,尝试连接多少次
    。比如"-t
    120"表示尝试120次。当这一项为"0"的时候,指定尝试无穷多次直到连接成功为止,这个
    设置非常有用,当对方服务器突然关机或者网络突然中断的时候,可以在恢复正常后继续
    下载没有传完的文件;
    · -c:断点续传,这也是个非常有用的设置,特别当下载比较大的文件的时候,如果中
    途意外中断,那么连接恢复的时候会从上次没传完的地方接着传,而不是又从头开始,使
    用这一项需要远程服务器也支持断点续传,一般来讲,基于UNIX/Linux的Web/FTP服务器
    都支持断点续传;
    · -T [number of seconds]:超时时间,指定多长时间远程服务器没有响应就中断连接
    ,开始下一次尝试。比如"-T
    120"表示如果120秒以后远程服务器没有发过来数据,就重新尝试连接。如果网络速度比
    较快,这个时间可以设置的短些,相反,可以设置的长一些,一般最多不超过900,通常
    也不少于60,一般设置在120左右比较合适;
    · -w [number of seconds]:在两次尝试之间等待多少秒,比如"-w 100"表示两次尝试
    之间等待100秒;
    · -Y on/off:通过/不通过代理服务器进行连接;
    · -Q [byetes]:限制下载文件的总大小最多不能超过多少,比如"-Q2k"表示不能超过2K
    字节,"-Q3m"表示最多不能超过3M字节,如果数字后面什么都不加,就表示是以字节为单
    位,比如"-Q200"表示最多不能超过200字节;
    · -nd:不下载目录结构,把从服务器所有指定目录下载的文件都堆到当前目录里;
    · -x:与"-nd"设置刚好相反,创建完整的目录结构,例如"wget -nd
    http://www.gnu.org"将创建在当前目录下创建"www.gnu.org"子目录,然后按照服务器
    实际的目录结构一级一级建下去,直到所有的文件都传完为止;
    · -nH:不创建以目标主机域名为目录名的目录,将目标主机的目录结构直接下到当前目
    录下;
    · --http-user=username
    · --http-passwd=password:如果Web服务器需要指定用户名和口令,用这两项来设定;
    · --proxy-user=username
    · --proxy-passwd=password:如果代理服务器需要输入用户名和口令,使用这两个选项
    ;
    · -r:在本机建立服务器端目录结构;
    · -l [depth]:下载远程服务器目录结构的深度,例如"-l 5"下载目录深度小于或者等
    于5以内的目录结构或者文件;
    · -m:做站点镜像时的选项,如果你想做一个站点的镜像,使用这个选项,它将自动设
    定其他合适的选项以便于站点镜像;
    · -np:只下载目标站点指定目录及其子目录的内容。这也是一个非常有用的选项,我们
    假设某个人的个人主页里面有一个指向这个站点其他人个人主页的连接,而我们只想下载
    这个人的个人主页,如果不设置这个选项,甚至--有可能把整个站点给抓下来,这显然是
    我们通常不希望的;
    ü 如何设定wget所使用的代理服务器
    wget可以使用用户设置文件".wgetrc"来读取很多设置,我们这里主要利用这个文件来是
    设置代理服务器。使用者用什么用户登录,那么什么用户主目录下的".wgetrc"文件就起
    作用。例如,"root"用户如果想使用".wgetrc"来设置代理服务器,"/root/.wgert"就起
    作用,下面给出一个".wge
    trc"文件的内容,读者可以参照这个例子来编写自己的"wgetrc"文件:
    http-proxy = 111.111.111.111:8080
    ftp-proxy = 111.111.111.111:8080
    这两行的含义是,代理服务器IP地址为:111.111.111.111,端口号为:80。第一行指定
    HTTP协议所使用的代理服务器,第二行指定FTP协议所使用的代理服务器。
    第二篇:
    $ wget --help
    GNU Wget 1.9.1,非交互式的网络文件下载工具。
    用法: wget [选项]... [URL]...
    长选项必须用的参数在使用短选项时也是必须的。
    启动:
    -V, --version      显示 Wget 的版本并且退出。
    -h, --help       打印此帮助。
    -b, -background     启动后进入后台操作。
    -e, -execute=COMMAND  运行‘.wgetrc’形式的命令。
    日志记录及输入文件:
    -o, --output-file=文件   将日志消息写入到指定文件中。
    -a, --append-output=文件  将日志消息追加到指定文件的末端。
    -d, --debug        打印调试输出。
    -q, --quiet        安静模式(不输出信息)。
    -v, --verbose        详细输出模式(默认)。
    -nv, --non-verbose     关闭详细输出模式,但不进入安静模式。
    -i, --input-file=文件   下载从指定文件中找到的 URL。
    -F, --force-html      以 HTML 方式处理输入文件。
    -B, --base=URL       使用 -F -i 文件选项时,在相对链接前添加指定的 URL。
    下载:
    -t, --tries=次数       配置重试次数(0 表示无限)。
    --retry-connrefused   即使拒绝连接也重试。
    -O  --output-document=文件  将数据写入此文件中。
    -nc, --no-clobber       不更改已经存在的文件,也不使用在文件名后
    添加 .#(# 为数字)的方法写入新的文件。
    -c, --continue        继续接收已下载了一部分的文件。
    --progress=方式     选择下载进度的表示方式。
    -N, --timestamping      除非远程文件较新,否则不再取回。
    -S, --server-response    显示服务器回应消息。
    --spider         不下载任何数据。
    -T, --timeout=秒数      配置读取数据的超时时间 (秒数)。
    -w, --wait=秒数       接收不同文件之间等待的秒数。
    --waitretry=秒数     在每次重试之间稍等一段时间 (由 1 秒至指定的 秒数不等)。
    --random-wait      接收不同文件之间稍等一段时间(由 0 秒至 2*WAIT 秒不等)。
    -Y, --proxy=on/off      打开或关闭代理服务器。
    -Q, --quota=大小       配置接收数据的限额大小。
    --bind-address=地址   使用本机的指定地址 (主机名称或 IP) 进行连接。
    --limit-rate=速率    限制下载的速率。
    --dns-cache=off     禁止查找存于高速缓存中的 DNS。
    --restrict-file-names=OS 限制文件名中的字符为指定的 OS (操作系统) 所允许的字符。
    目录:
    -nd --no-directories      不创建目录。
    -x, --force-directories     强制创建目录。
    -nH, --no-host-directories    不创建含有远程主机名称的目录。
    -P, --directory-prefix=名称   保存文件前先创建指定名称的目录。
    --cut-dirs=数目       忽略远程目录中指定数目的目录层。
    HTTP 选项:
    --http-user=用户  配置 http 用户名。
    --http-passwd=密码  配置 http 用户密码。
    -C, --cache=on/off    (不)使用服务器中的高速缓存中的数据 (默认是使用的)。
    -E, --html-extension   将所有 MIME 类型为 text/html 的文件都加上 .html 扩展文件名。
    --ignore-length    忽略“Content-Length”文件头字段。
    --header=字符串     在文件头中添加指定字符串。
    --proxy-user=用户  配置代理服务器用户名。
    --proxy-passwd=密码  配置代理服务器用户密码。
    --referer=URL     在 HTTP 请求中包含“Referer:URL”头。
    -s, --save-headers    将 HTTP 头存入文件。
    -U, --user-agent=AGENT  标志为 AGENT 而不是 Wget/VERSION。
    --no-http-keep-alive 禁用 HTTP keep-alive(持久性连接)。
    --cookies=off     禁用 cookie。
    --load-cookies=文件  会话开始前由指定文件载入 cookie。
    --save-cookies=文件  会话结束后将 cookie 保存至指定文件。
    --post-data=字符串  使用 POST 方法,发送指定字符串。
    --post-file=文件   使用 POST 方法,发送指定文件中的内容。
    HTTPS (SSL) 选项:
    --sslcertfile=文件   可选的客户段端证书。
    --sslcertkey=密钥文件 对此证书可选的“密钥文件”。
    --egd-file=文件    EGD socket 文件名。
    --sslcadir=目录     CA 散列表所在的目录。
    --sslcafile=文件   包含 CA 的文件。
    --sslcerttype=0/1   Client-Cert 类型 0=PEM (默认) / 1=ASN1 (DER)
    --sslcheckcert=0/1   根据提供的 CA 检查服务器的证书
    --sslprotocol=0-3   选择 SSL 协议;0=自动选择,
    1=SSLv2 2=SSLv3 3=TLSv1
    FTP 选项:
    -nr, --dont-remove-listing  不删除“.listing”文件。
    -g, --glob=on/off      设置是否展开有通配符的文件名。
    --passive-ftp      使用“被动”传输模式。
    --retr-symlinks     在递归模式中,下载链接所指示的文件(连至目录
    则例外)。
    递归下载:
    -r, --recursive     递归下载。
    -l, --level=数字     最大递归深度(inf 或 0 表示无限)。
    --delete-after    删除下载后的文件。
    -k, --convert-links   将绝对链接转换为相对链接。
    -K, --backup-converted  转换文件 X 前先将其备份为 X.orig。
    -m, --mirror       等效于 -r -N -l inf -nr 的选项。
    -p, --page-requisites  下载所有显示完整网页所需的文件,例如图像。
    --strict-comments  打开对 HTML 备注的严格(SGML)处理选项。
    递归下载时有关接受/拒绝的选项:
    -A, --accept=列表        接受的文件样式列表,以逗号分隔。
    -R, --reject=列表        排除的文件样式列表,以逗号分隔。
    -D, --domains=列表        接受的域列表,以逗号分隔。
    --exclude-domains=列表    排除的域列表,以逗号分隔。
    --follow-ftp         跟随 HTML 文件中的 FTP 链接。
    --follow-tags=列表      要跟随的 HTML 标记,以逗号分隔。
    -G, --ignore-tags=列表      要忽略的 HTML 标记,以逗号分隔。
    -H, --span-hosts         递归时可进入其它主机。
    -L, --relative          只跟随相对链接。
    -I, --include-directories=列表  要下载的目录列表。
    -X, --exclude-directories=列表  要排除的目录列表。
    -np, --no-parent         不搜索上层目录。

    下载文件:url

  • 相关阅读:
    POJ 1691 Painting a Board(状态压缩DP)
    POJ 1946 Cow Cycling(抽象背包, 多阶段DP)
    Leetcode: Best Time to Buy and Sell Stock I, II
    Leetcode: Valid Palindrome
    POJ 1946 Cow Cycling
    POJ 1661 Help Jimmy(递推DP)
    POJ 1160 Post Office(区间DP)
    POJ 2486 apple tree
    Android播放器框架分析之AwesomePlaye
    【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位...
  • 原文地址:https://www.cnblogs.com/7qin/p/14100585.html
Copyright © 2020-2023  润新知