使用 curl
和 wget
下载文件
1. 认识 curl
你有没有遇到过这种情况:面试时需要从终端下载一个文件,但你忘记怎么操作了?今天我们就来学习如何使用 curl
和 wget
,这些工具将成为你处理网络数据的好帮手。
这些工具可以用来下载网页、文件、发送 HTTP 请求、操作 API,甚至执行自动化脚本。我们来一起了解它们的功能、优势以及常见的使用场景。
curl
是一个命令行工具,用于通过网络协议传输数据。它的强大之处在于灵活性:支持 20 多种协议(HTTP、HTTPS、FTP、SCP,甚至 SMTP)。开发者称它为处理互联网的“瑞士军刀”,真的很贴切。
curl
的基本语法
curl [选项] URL
简单来说,输入 curl
命令,指定一个地址,你就能看到结果了。一起来看看怎么用。
下载网页
假设你想下载 Google 的首页,可以这样做:
curl http://www.google.com
屏幕上会显示网页的 HTML 代码。如果你想研究网站的结构,或者进行相关的自动化操作,这很有用。
将内容保存到文件
如果不想让这些文本流充满屏幕,可以将结果保存到文件中:
curl -o google.html http://www.google.com
选项 -o
(output)告诉 curl
我们想将输出重定向到一个文件。现在 HTML 代码已经保存到 google.html
。想听个笑话吗?把这个文件发给朋友,然后告诉他你“下载了整个互联网”。
下载文件
想象一下,你需要从网络上下载一个文件(比如一个 .zip
)。curl
在这方面非常给力:
curl -O http://example.com/file.zip
与 -o
不同,选项 -O
会用 URL 中的原始文件名保存文件。如果你要从同一个来源下载很多文件,这就非常有用了。
HTTP 认证
有时文件或 API 资源的访问受登录名和密码保护。这种情况下,可以这样用带 -u
选项的 curl
:
curl -u username:password http://example.com/private-data
这在使用受限 API(比如 GitHub 或 Docker Registry)时特别有用。
通过 API 下载
curl
最酷的功能之一就是操作 API。例如,你需要向服务器发送一个请求,返回 JSON 格式的数据:
curl -X GET "https://api.exchangerate-api.com/v4/latest/USD"
这里 -X
选项指定 HTTP 请求的方法(GET、POST、DELETE 等)。这对集成外部服务的自动化很有帮助。
2. 什么是 wget
?
如果 curl
是瑞士军刀,那么 wget
就是推土机。它的主要任务是下载文件。跟 curl
的主要区别是,wget
专为可靠下载大文件设计,同时支持断点续传,这在网络连接不好的情况下非常方便。
wget
的基本语法
wget [选项] URL
简单下载文件
wget http://example.com/file.zip
这个命令会下载文件并用原始名字保存在当前目录下。简单又高效。
用其他名字保存
如果你不喜欢文件的原始名字,可以自己设置一个:
wget -O newfile.zip http://example.com/file.zip
断点续传
假设你在下载一个超大的文件,结果网络断了。别担心:只要用 -c
(continue) 参数:
wget -c http://example.com/largefile.iso
wget
会从下载中断的地方继续。而且即使过了几天,只要服务器支持这种模式,它也一样能继续下载。
下载整个网站
是的,用 wget
可以下载整个网站(或其副本)。只需要用 --mirror
参数:
wget --mirror http://example.com
这个命令会下载网站并保持目录结构。这样你就有一个网站的 "镜像" 能离线使用。
3. 对比 curl
和 wget
功能 | curl | wget |
---|---|---|
支持大量协议 | 是 | 仅限HTTP/HTTPS和FTP |
自动续传下载 | 否(可以通过脚本实现) | 是 |
处理API | 是 | 否 |
文件管理的方便性 | 一般 | 优秀 |
下载整个网站 | 否 | 是 |
总的来说,如果你需要处理API或者一些特定功能,那就用curl
。如果只是下载文件,wget
会是更好的选择。
4. 实际应用
文件下载与处理
结合 wget
和我们的文本操作技能:
wget -O data.txt http://example.com/data.txt
cat data.txt | grep "keyword" | awk '{print $2, $4}'
在这里,我们下载了文件,根据关键字过滤了内容,并提取了需要的列。
使用 API
用 curl
下载汇率数据并找到所需的币种:
curl -s "https://api.exchangerate-api.com/v4/latest/USD" | grep "EUR"
这非常有用,比如你想搭建一个自动化的货币兑换系统。
自动化更新
假设你需要每天下载一个文件的更新。以下是一个简单脚本的例子:
#!/bin/bash
wget -O updates.zip http://example.com/daily-updates.zip
unzip -o updates.zip -d /path/to/updates
保存这个脚本并将其添加到 cron
。现在,它就会自动执行了——是不是很棒?
5. 常见错误和特点
错误 403 (Forbidden):
如果服务器要求额外的 headers(比如 User-Agent),会出现这个错误。可以这样解决:
curl -A "Mozilla/5.0" http://example.com
重定向:
如果服务器将你重定向到另一个 URL,在 curl
中添加 -L
标志:
curl -L http://example.com
SSL 错误:
有时候 wget
或 curl
会提示 SSL 错误。可以禁用证书验证(但这样不安全!):
wget --no-check-certificate https://example.com
curl -k https://example.com
有了这强大的工具套件,你已经准备好在终端中攻克互联网了。没有任何文件或 API 能逃过你的掌控——是时候开始下载、处理和自动化啦!
GO TO FULL VERSION