curl与wget实战:Linux下HTTP请求的自动化脚本化方案

90 阅读2分钟

huake_00219_.jpg在Linux运维与开发中,curl和wget作为HTTP协议的经典命令行工具,通过脚本化封装可实现文件下载、API调用、自动化测试等高频场景的效率革命。本文从实战角度解析两者的核心能力与脚本化技巧。


一、工具特性对比与选型****

维度curlwget
核心定位HTTP协议调试与数据传输递归下载与离线资源获取
协议支持HTTP/1.1、HTTP/2、HTTPS、FTP等HTTP/HTTPS、FTP,支持断点续传
脚本优势精细控制请求头/体,支持JSON/XML内置递归爬取逻辑,适合批量下载
典型场景API调用、服务健康检查、性能测试静态资源备份、网站镜像、日志归档

二、自动化脚本化实战****

1. API自动化调用(curl)****

bash

 #!/bin/bash
 # 定义变量
 API_URL="api.example.com/users"
 TOKEN="Bearer abc123xyz"
  
 # 发送带认证的POST请求
 curl -X POST "$API_URL" \
 -H "Authorization: $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{"name":"test","email":"test@example.com"}' \
 -o response.json -sS \
 && echo "API调用成功"echo "API调用失败"
  
 # 解析JSON响应
 USER_ID=$(jq -r '.id' response.json 2>/dev/null)
 if [ -n "$USER_ID" ]; then
 echo "创建用户ID: $USER_ID" >> api_log.txt
 fi

关键技巧

· -sS静默模式+错误输出

· jq工具解析JSON响应

· 结合&&/||实现条件执行

2. 批量资源下载(wget)****

bash

 #!/bin/bash
 # 下载网站所有PDF文件
 URL_LIST="example.com/docs/file1.… example.com/docs/file2.…"
 LOG_FILE="download.log"
  
 # 多线程并发下载(GNU wget支持)
 for url in $URL_LIST; do
 wget -c -q -t 3 --show-progress \
 --header="User-Agent: MyBot/1.0" \
 -O "(basename(basename url)" "url"2>>"url" 2>> "LOG_FILE" &
 done
  
 # 等待所有后台任务完成
 wait
 echo "所有文件下载完成,日志见$LOG_FILE"

核心参数

· -c断点续传

· -t 3重试3次

· -O自定义文件名

· --header模拟浏览器请求


三、高级脚本化方案****

1. 

定时任务集成

2. 

3. 

bash

4. 

5. 

 # 每天凌晨2点同步远程日志
 0 2 * * * /usr/bin/curl -s "logs.example.com/sync" --data-urlencode "token=SECRET" > /dev/null

6. 

7. 

错误处理增强

8. 

9. 

bash

10. 

11. 

 if ! curl -f -o /dev/null "api.example.com/health"; then
 echo "服务不可用"mail -s "告警" admin@example.com
 fi

12. 

13. 

跨平台兼容性

14. 

15. 

bash

16. 

17. 

 # 使用条件判断适配不同系统
 if command -v curl &> /dev/null; then
 HTTP_CMD="curl -s"
 else
 HTTP_CMD="wget -qO-"
 fi
 $HTTP_CMD "example.com/data"jq .

18. 


四、性能优化建议****

· 连接复用:curl --keepalive-time 60(减少TCP握手开销)

· 并发控制:xargs -P 4(限制最大并发数)

· 缓存复用:wget --cache=on --directory-prefix=./cache

通过脚本化封装,curl和wget可替代Python/Go等语言实现80%的HTTP自动化需求,尤其在资源受限的嵌入式Linux环境中更具优势。实际项目中建议结合crontab、systemd timer或CI/CD流水线实现全链路自动化。