linux命令-wget与curl命令详解
linux命令-wget与curl命令详解
- **一、`wget` 命令详解**
- **1. 基本语法**
- **2. 核心功能**
- **3. 常用选项与示例**
- **示例 1:基本下载**
- **示例 2:自定义输出文件名**
- **示例 3:后台下载**
- **示例 4:断点续传**
- **示例 5:限速下载**
- **示例 6:递归下载网站**
- **示例 7:批量下载**
- **示例 8:忽略证书验证**
- **示例 9:使用代理服务器**
- **示例 10:模拟浏览器 User-Agent**
- **示例 11:下载并解压压缩包**
- **示例 12:排除特定文件类型**
- **4. 高级用法**
- **镜像整个网站**
- **按时间过滤下载**
- **通过 FTP 下载**
- **二、`curl` 命令详解**
- **1. 基本语法**
- **2. 核心功能**
- **3. 常用选项与示例**
- **示例 1:发送 GET 请求**
- **示例 2:保存响应到文件**
- **示例 3:显示响应头**
- **示例 4:发送 POST 请求**
- **示例 5:上传文件**
- **示例 6:使用 HTTP 认证**
- **示例 7:设置自定义请求头**
- **示例 8:跟随重定向**
- **示例 9:使用 Cookie**
- **示例 10:调试模式**
- **示例 11:发送 JSON 数据**
- **示例 12:限速下载**
- **4. 高级用法**
- **使用代理服务器**
- **通过 FTP 上传文件**
- **模拟浏览器会话**
- **处理压缩响应**
- **三、`wget` vs `curl` 核心区别**
- **1. 设计哲学**
- **2. 功能对比**
- **3. 典型场景**
- **四、扩展总结**
- **1. 性能优化**
- **2. 安全性**
- **3. 生态系统**
一、wget
命令详解
1. 基本语法
wget [选项] [URL]
2. 核心功能
- 支持 HTTP、HTTPS、FTP 协议。
- 支持断点续传、递归下载、批量下载和镜像网站。
- 非交互式操作,适合脚本自动化。
3. 常用选项与示例
示例 1:基本下载
wget https://example.com/file.zip
- 说明:下载文件到当前目录,保留原始文件名。
示例 2:自定义输出文件名
wget -O custom_name.zip https://example.com/file.zip
- 参数:
-O
指定输出文件名。 - 场景:重命名下载文件,避免默认名称冲突。
示例 3:后台下载
wget -b https://example.com/large-file.iso
- 参数:
-b
启用后台模式。 - 输出:日志保存在
wget-log
文件中。
示例 4:断点续传
wget -c https://example.com/interrupted-file.iso
- 参数:
-c
继续未完成的下载。 - 场景:网络中断后恢复下载。
示例 5:限速下载
wget --limit-rate=200k https://example.com/file.iso
- 参数:
--limit-rate
限制下载速度。 - 场景:避免占用过多带宽。
示例 6:递归下载网站
wget -r -l 5 --convert-links https://example.com
- 参数:
-r
递归下载。-l 5
设置递归深度为 5 层。--convert-links
转换链接为本地可用形式。
- 场景:离线浏览网站内容。
示例 7:批量下载
wget -i url_list.txt
- 参数:
-i
从文件读取 URL 列表。 - 文件格式:每行一个 URL。
示例 8:忽略证书验证
wget --no-check-certificate https://example.com
- 参数:
--no-check-certificate
跳过 SSL 证书检查。 - 场景:测试环境或自签名证书。
示例 9:使用代理服务器
wget -e use_proxy=yes -e http_proxy=192.168.1.1:8080 https://example.com
- 参数:
-e
设置环境变量,指定代理地址。 - 场景:通过企业代理访问外部资源。
示例 10:模拟浏览器 User-Agent
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://example.com
- 参数:
--user-agent
伪装客户端身份。 - 场景:绕过某些网站的反爬虫机制。
示例 11:下载并解压压缩包
wget -q -O - https://example.com/archive.tar.gz | tar -xz
- 参数:
-q
静默模式。-O -
将输出重定向到标准输出。
- 场景:下载后直接解压,无需保存临时文件。
示例 12:排除特定文件类型
wget -r -R "*.jpg,*.png" https://example.com
- 参数:
-R
拒绝下载匹配的文件。 - 场景:仅下载 HTML/CSS 文件。
4. 高级用法
镜像整个网站
wget --mirror --convert-links --adjust-extension --page-requisites https://example.com
- 参数:
--mirror
等效于-r -N -l inf
。--adjust-extension
确保文件扩展名正确。--page-requisites
下载所有页面依赖(如图片、CSS)。
按时间过滤下载
wget -N https://example.com/file.txt
- 参数:
-N
仅下载比本地文件更新的版本。
通过 FTP 下载
wget --ftp-user=username --ftp-password=password ftp://example.com/file.txt
- 场景:从受密码保护的 FTP 服务器下载。
二、curl
命令详解
1. 基本语法
curl [选项] [URL]
2. 核心功能
- 支持 20+ 协议(HTTP/HTTPS、FTP、SCP、SMTP 等)。
- 支持请求头操作、Cookie 管理、代理和 API 交互。
- 输出到标准输出,适合管道操作。
3. 常用选项与示例
示例 1:发送 GET 请求
curl https://api.example.com/data
- 说明:默认输出响应内容到终端。
示例 2:保存响应到文件
curl -o output.json https://api.example.com/data
- 参数:
-o
指定输出文件名。
示例 3:显示响应头
curl -i https://api.example.com/data
- 参数:
-i
包含响应头信息。 - 输出:HTTP 状态码、Content-Type 等。
示例 4:发送 POST 请求
curl -X POST -d "name=John&age=30" https://api.example.com/submit
- 参数:
-X POST
指定 HTTP 方法。-d
发送表单数据。
示例 5:上传文件
curl -F "file=@/path/to/local_file.txt" https://api.example.com/upload
- 参数:
-F
发送 multipart/form-data 数据。 - 场景:文件上传接口测试。
示例 6:使用 HTTP 认证
curl -u username:password https://api.example.com/secure
- 参数:
-u
提供用户名和密码。
示例 7:设置自定义请求头
curl -H "Content-Type: application/json" -H "Authorization: Bearer TOKEN" https://api.example.com
- 参数:
-H
添加 HTTP 头。 - 场景:调用需要 Token 的 API。
示例 8:跟随重定向
curl -L https://example.com/redirect
- 参数:
-L
自动跟随 3xx 重定向。
示例 9:使用 Cookie
curl -b "session=abc123" https://example.com/dashboard
- 参数:
-b
发送 Cookie。 - 扩展:保存 Cookie 到文件:
curl -c cookies.txt https://example.com
示例 10:调试模式
curl -v https://api.example.com
- 参数:
-v
显示详细通信过程(包括请求头和 SSL 握手)。
示例 11:发送 JSON 数据
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com
- 场景:测试 RESTful API 的 JSON 接口。
示例 12:限速下载
curl --limit-rate 1M -O https://example.com/large-file.iso
- 参数:
--limit-rate
限制传输速度。
4. 高级用法
使用代理服务器
curl -x http://192.168.1.1:8080 https://example.com
- 参数:
-x
指定代理地址。
通过 FTP 上传文件
curl -T local_file.txt ftp://example.com/ --user ftp_user:ftp_password
- 参数:
-T
指定上传文件。
模拟浏览器会话
curl -A "Mozilla/5.0" -H "Accept-Language: en-US" https://example.com
- 参数:
-A
设置 User-Agent。
处理压缩响应
curl --compressed https://example.com
- 参数:
--compressed
请求压缩内容(如 gzip)。
三、wget
vs curl
核心区别
1. 设计哲学
wget
:专注于 批量下载 和 离线使用(如镜像网站)。curl
:专注于 协议交互 和 API 测试(支持更多协议和方法)。
2. 功能对比
特性 | wget | curl |
---|---|---|
递归下载 | 原生支持(-r ) | 不支持 |
断点续传 | 自动支持(-c ) | 需手动指定范围(-C - ) |
输出目标 | 默认保存到文件 | 默认输出到终端 |
协议支持 | HTTP/HTTPS/FTP | HTTP/HTTPS、FTP、SMTP、SCP 等 20+ |
上传功能 | 仅支持 FTP | 支持 HTTP PUT/POST、FTP 上传 |
Cookie 管理 | 需手动配置 | 支持自动保存和加载(-c /-b ) |
代理配置 | 需环境变量或复杂参数 | 直接通过 -x 指定 |
脚本友好性 | 更适合自动化下载任务 | 更适合调试和复杂请求 |
3. 典型场景
- 使用
wget
:- 下载 Linux 镜像文件。
- 离线备份整个网站。
- 通过脚本定时抓取资源。
- 使用
curl
:- 测试 REST API 的 POST/PUT 接口。
- 上传文件到云存储。
- 调试 HTTP 头或证书问题。
四、扩展总结
1. 性能优化
wget
:通过--limit-rate
控制带宽,适合长时间后台任务。curl
:通过--parallel
实现多线程下载(需特定版本)。
2. 安全性
wget
:默认验证 SSL 证书,可通过--no-check-certificate
跳过。curl
:严格遵循证书验证,需-k
忽略错误。
3. 生态系统
wget
:适合集成到 Shell 脚本或 Cron 任务。curl
:被广泛用于 CI/CD 流水线(如 GitHub Actions)。