shell 学习笔记 网页操作 wget lynx cURL

摘自 Linux Shell 脚本攻略 第五章 一团乱麻?没这回事!

Web 页面下载

用wget可以下载Web页面或远程文件

$ wget knopper.net
--2021-11-23 20:37:27--  http://knopper.net/
Resolving knopper.net (knopper.net)... 81.169.229.18
Connecting to knopper.net (knopper.net)|81.169.229.18|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7657 (7.5K) [text/html]
Saving to: ‘index.html’

index.html                                           100%[=====================================================================================================================>]   7.48K  --.-KB/s    in 0s      

2021-11-23 20:37:28 (81.0 MB/s) - ‘index.html’ saved [7657/7657]

你可以通过选项-O指定输出文件名

$ wget http://www.knopper.net -O knopper.html
--2021-11-23 20:38:27--  http://www.knopper.net/
Resolving www.knopper.net (www.knopper.net)... 81.169.229.18
Connecting to www.knopper.net (www.knopper.net)|81.169.229.18|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7657 (7.5K) [text/html]
Saving to: ‘knopper.html’

knopper.html                                         100%[=====================================================================================================================>]   7.48K  --.-KB/s    in 0s      

2021-11-23 20:38:28 (311 MB/s) - ‘knopper.html’ saved [7657/7657]

也可以用选项-o指定一个日志文件

$ wget http://www.knopper.net -O knopper.html -o log

选项-t可以指定在放弃下载之前尝试多少次

$ wget -t 5 URL
# 将-t选项的值设为0会强制wget不断地进行重试
$ wget -t 0 URL

下载限速

  • 选项–limit-rate可以限定下载任务能够占有的最大 带宽
$ wget --limit-rate 20k  http://10.18.7.30/res/apk/Camera2.apk
--2021-11-23 21:14:32--  http://10.18.7.30/res/apk/Camera2.apk
Connecting to 10.18.7.30:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4278821 (4.1M) [application/octet-stream]
Saving to: ‘Camera2.apk’

Camera2.apk                                            2%[=>                                                                                                                    ]  96.00K  20.0KB/s    eta 3m 25s 
  • 选项–quota或-Q可以指定最大下载配额(quota)
$ wget -Q 100m  http://10.18.7.30/res/apk/Camera2.apk
--2021-11-23 21:16:09--  http://10.18.7.30/res/apk/Camera2.apk
Connecting to 10.18.7.30:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4278821 (4.1M) [application/octet-stream]
Saving to: ‘Camera2.apk.1’

Camera2.apk.1                                        100%[=====================================================================================================================>]   4.08M  --.-KB/s    in 0.05s   

2021-11-23 21:16:09 (87.0 MB/s) - ‘Camera2.apk.1’ saved [4278821/4278821]

断点续传

$ wget --limit-rate 100k  http://10.18.7.30/res/apk/Camera2.apk
--2021-11-23 21:17:38--  http://10.18.7.30/res/apk/Camera2.apk
Connecting to 10.18.7.30:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4278821 (4.1M) [application/octet-stream]
Saving to: ‘Camera2.apk’

Camera2.apk                                           12%[=============>                                                                                                        ] 525.21K   100KB/s    eta 37s    ^C
# 这次下载从12% 开始
amlogic@amlogic-ThinkCentre-M930t-N000:~/coco$ wget -c --limit-rate 100k  http://10.18.7.30/res/apk/Camera2.apk
--2021-11-23 21:17:57--  http://10.18.7.30/res/apk/Camera2.apk
Connecting to 10.18.7.30:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 4278821 (4.1M), 3716429 (3.5M) remaining [application/octet-stream]
Saving to: ‘Camera2.apk’

Camera2.apk                                           29%[+++++++++++++++===================>                                                                                   ]   1.22M   100KB/s    eta 30s    ^C

复制整个网站(镜像)

$ wget --mirror --convert-links exampledomain.com
# 或者
$ wget -r -N -l -k DEPTH URL

访问需要认证的HTTP或FTP页面

$ wget --user username --password pass URL

也可以不在命令行中指定密码,而是在网页上手动输入密码,这就需要将–password改为
–ask-password

以纯文本形式下载页面

lynx命令默认并没有安装在各种发行版中,不过可以通过包管理器来获取

sudo apt-get install lynx

选项-dump能够以纯ASCII编码的形式下载Web页面

$ lynx -dump http://10.18.7.30/res/apk/ > webpage_as_text.txt
$ cat webpage_as_text.txt 
                               Index of /res/apk/
     __________________________________________________________________

[1]../
[2]Camera2.apk                                        22-Oct-2021 11:13      4M
[3]DemoCamera-20210330.apk                            22-Oct-2021 11:13    277K
[4]ExoPlayer_lab126_v2.4.8_signed.apk                 22-Oct-2021 11:13      6M
[5]KeyMonitor.apk                                     22-Oct-2021 11:13     17K
[6]PFXStress.apk                                      22-Oct-2021 11:13     14M
[7]SHCMCCX_Tailor.apk                                 22-Oct-2021 11:13      5M
[8]SHCMCCX_Test-0427.apk                              22-Oct-2021 11:13      5M
[9]TvSettings.apk                                     22-Oct-2021 11:13     10M
[10]V1.6.4.3-20210426.apk                              22-Oct-2021 11:13     13M
[11]WasuTV5.0_cmcc_5.0.0.52_202012181413_signed_sig..> 22-Oct-2021 11:13     21M
[12]WifiTests-debug.apk                                11-Nov-2021 02:38      1M
[13]antutu-benchmark-v573.apk                          22-Oct-2021 11:13     15M
[14]antutu-v5-3d-plugin.apk                            22-Oct-2021 11:13     22M
[15]app-debug-androidTest.apk                          22-Oct-2021 11:13      1M
[16]app-debug.apk                                      22-Oct-2021 11:13     87M
[17]app-uiautomator-test.apk                           22-Oct-2021 11:13      1M
[18]app-uiautomator.apk                                22-Oct-2021 11:13      2M
[19]iperf.apk                                          22-Oct-2021 11:13    786K
     __________________________________________________________________

References

   1. http://10.18.7.30/res/
   2. http://10.18.7.30/res/apk/Camera2.apk
   3. http://10.18.7.30/res/apk/DemoCamera-20210330.apk
   4. http://10.18.7.30/res/apk/ExoPlayer_lab126_v2.4.8_signed.apk
   5. http://10.18.7.30/res/apk/KeyMonitor.apk
   6. http://10.18.7.30/res/apk/PFXStress.apk
   7. http://10.18.7.30/res/apk/SHCMCCX_Tailor.apk
   8. http://10.18.7.30/res/apk/SHCMCCX_Test-0427.apk
   9. http://10.18.7.30/res/apk/TvSettings.apk
  10. http://10.18.7.30/res/apk/V1.6.4.3-20210426.apk
  11. http://10.18.7.30/res/apk/WasuTV5.0_cmcc_5.0.0.52_202012181413_signed_signed.apk
  12. http://10.18.7.30/res/apk/WifiTests-debug.apk
  13. http://10.18.7.30/res/apk/antutu-benchmark-v573.apk
  14. http://10.18.7.30/res/apk/antutu-v5-3d-plugin.apk
  15. http://10.18.7.30/res/apk/app-debug-androidTest.apk
  16. http://10.18.7.30/res/apk/app-debug.apk
  17. http://10.18.7.30/res/apk/app-uiautomator-test.apk
  18. http://10.18.7.30/res/apk/app-uiautomator.apk
  19. http://10.18.7.30/res/apk/iperf.apk

cURL 入门

cURL可以使用HTTP、HTTPS、FTP协议在客户端与服务器之间传递数据。它支持POST、 cookie、认证、从指定偏移处下载部分文件、参照页(referer)、用户代理字符串、扩展头部、限 速、文件大小限制、进度条等特性。cURL可用于网站维护、数据检索以及服务器配置核对

使用下列命令将下载的文件输出到stdout

$ curl URL

选项-O指明将下载数据写入文件

# 如果不想显示进度信 息,可以使用--silent选项
$ curl www.knopper.net/index.htm --silent -O

选项-o可以指定输出文件名。如果使用了该选项,只需要写明站点的域名就可以下载其 主页了

$ curl www.knopper.net -o knoppix_index.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7657  100  7657    0     0   9680      0 --:--:-- --:--:-- --:--:--  9667

如果需要在下载过程中显示形如#的进度条,可以使用选项–progress-bar

$ curl http://knopper.net -o index.html --progress-bar 
############################################################################################################################################################################################################ 100.0%

断点续传

curl URL/file -C offset

偏移量是以字节为单位的整数。如果只是想断点续传,那么cURL不需要指定准确的字节偏 移。要是你希望cURL推断出正确的续传位置,请使用选项-C -,就像这样

$ curl -C - URL

用cURL设置参照页字符串

可以用curl命令的 --referer选项指定参照页字符串

$ curl --referer Referer_URL target_URL

$ curl --referer http://google.com http://knopper.org

用cURL设置cookie

选项–cookieCOOKIE_IDENTIFER可以指定提供哪些cookie。cookies需要以name=value 的形式来给出。多个cookie之间使用分号分隔

$ curl http://example.com --cookie "user=username;pass=hack"

# 选项--cookie-jar可以将cookie另存为文件
$ curl URL --cookie-jar cookie_file

用cURL设置用户代理字符串

cURL的选项–user-agent或-A用于设置用户代理

$ curl URL --user-agent "Mozilla/5.0"

# cURL也能够发送其他HTTP头部信息。使用-H "Header"传递多个头部信息
$ curl -H "Host: www.knopper.net" -H "Accept-language: en" URL

限定cURL可占用的带宽

$ curl URL --limit-rate 20k

指定最大下载量

$ curl URL --max-filesize bytes

如果文件大小超出限制,命令返回一个非0的退出码。如果文件下载成功, 则返回0

用cURL进行认证

可以用curl的选项-u完成HTTP或FTP认证。
使用-u username:password来指定用户名和密码

$ curl -u user:pass http://test_auth.com

如果你喜欢经提示后输入密码,只需要使用用户名即可

$ curl -u user http://test_auth.com

只打印响应头部信息(不包括数据部分)

选项-I或–head可以只打印HTTP头部信息,无须下载远程文件

$ curl -I http://knopper.net
HTTP/1.1 200 OK
Date: Tue, 08 Nov 2016 17:15:21 GMT
Server: Apache
Last-Modified: Wed, 26 Oct 2016 23:29:56 GMT
ETag: "1d3c8-1af3-b10500"
Accept-Ranges: bytes
Content-Length: 6899
Content-Type: text/html; charset=ISO-8859-1

从命令行访问未读的Gmail邮件

来看下面这个脚本文件,它的作用是通过解析Gmail的RSS feed来显示未读的邮件
以下代码未运行,只做摘抄

#!/bin/bash
#用途: Gmail邮件读取工具
username='PUT_USERNAME_HERE'
password='PUT_PASSWORD_HERE'
SHOW_COUNT=5 # 需要显示的未读邮件数量
echo
    curl  -u $username:$password --silent \
         "https://mail.google.com/mail/feed/atom" | \
         tr -d '\n' | sed 's:</entry>:\n:g' |\
         sed -n
's/.*<title>\(.*\)<\/title.*<author><name>\([^<]*\)<\/name><email> \([^<]*\).*/From: \2 [\3] \nSubject: \1\n/p' | \
    head -n $(( $SHOW_COUNT * 3 ))

cURL使用-u user: pass所提供的用户认证信息来读入RSS feed。如果只用了-u user,
cURL在运行时会要求输入密码

tr -d '\n’移除了所有的换行符
sed 's::\n:g’将每一处替换成换行符,以保证每一条邮件项独立成行,以便逐行解析邮件

该脚本接下来的部分作为sed的单个表达式执行,用于提取相关字段
sed ‘s/.(.)</title.([^<])</name> ([^<])./Author: \2 [\3] \nSubject: \1\n/’

脚本用(.<em>)</title匹配邮件标题,([^<]</em>)</ name>匹 配发件人姓名,([^<]*)匹配发件人电子邮件地址。sed利用反向引用,将邮件的作 者(author)、标题(title)和主题(subject)以易读的形式显示出来

Author: \2 [\3] \nSubject: \1\n
\1对应于第一处匹配(邮件标题),\2对应于第二处匹配(发件人姓名),以此类推

SHOW_COUNT=5用来设置需要在终端中显示的未读邮件数量

head用来显示SHOW_COUNT*31行文本。SHOW_COUNT乘以3是因为每一封未读邮件的相关信息需要占用3行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值