curl 和 wget在linux日常使用中非常常见,它们都可以向服务器发出请求,curl 和 wget 的一个最明显的区别是:默认情况下 wget 将查询的网页保存到系统,而 curl 将其显示在终端输出中但不保存它,curl 的使用率比 wget 多得多,可用于手机、计算机(包括 windows 和 macos 等操作系统)甚至物联网设备(例如智能手表、智能冰箱和其他类似物品)等环境中。
1. 使用 curl 检测网页状态
基础命令:检查 http 状态码
curl -s -o /dev/null -w "%{http_code}" https://example.com
- 输出结果:直接返回状态码(如 200 表示正常)。
- 参数解释:
- -s:静默模式(不显示进度或错误信息)。
- -o /dev/null:丢弃响应内容(仅保留头信息)。
- -w "%{http_code}":输出 http 状态码。
完整检测(包含重定向)
curl -l -s -o /dev/null -w "%{http_code} %{url_effective}\n" https://example.com
- 输出示例:200 https://example.com/(最终状态码和实际访问的 url)。
- 参数解释:
- -l:自动跟随重定向(如 301/302)。
高级用法:超时和详细诊断
curl --connect-timeout 10 --max-time 20 -v -i https://example.com
- 参数解释:
- --connect-timeout 10:连接超时时间(10 秒)。
- --max-time 20:整个请求超时时间(20 秒)。
- -v:显示详细日志(调试用)。
- -i:仅获取响应头(head 请求)。
2. 使用 wget 检测网页状态
基础命令:检查 http 状态码
wget --spider -s --max-redirect 0 https://example.com 2>&1 | grep "http/" | awk '{print $2}'
- 输出结果:直接返回状态码(如 200)。
- 参数解释:
- --spider:模拟爬虫(不下载内容)。
- -s:显示服务器响应头。
- --max-redirect 0:禁用重定向(查看原始状态码)。
完整检测(包含重定向)
wget --spider -q -o /dev/null https://example.com && echo "ok" || echo "fail"
- 输出示例:ok(状态码为 200)或 fail(其他状态码或连接失败)。
- 参数解释:
- -q:静默模式。
- -o /dev/null:丢弃下载内容。
3. 自动化脚本示例
**curl 脚本(检查状态码是否为 200)**
#!/bin/bash url="https://example.com" status_code=$(curl -s -o /dev/null -w "%{http_code}" -l $url) if [ $status_code -eq 200 ]; then echo "$url is up (status: $status_code)" else echo "$url is down (status: $status_code)" exit 1 fi
**wget 脚本(检查是否可访问)**
#!/bin/bash url="https://example.com" wget --spider -q -t 10 -t 2 $url if [ $? -eq 0 ]; then echo "$url is up" else echo "$url is down" exit 1 fi
- 参数解释:
- -t 10:超时时间(10 秒)。
- -t 2:重试次数(2 次)。
4. 常见状态码解释
状态码 | 含义 | 典型场景 |
200 | ok | 正常访问 |
301/302 | 永久/临时重定向 | 域名跳转(需 -l 跟随) |
403 | forbidden | ip/ua 被拦截 |
404 | not found | 页面不存在 |
500 | internal server error | 服务器内部错误 |
503 | service unavailable | 服务过载或维护 |
5. 高级场景
检查内容是否包含关键字
# 使用 curl 检查内容是否包含 "welcome" curl -s -l https://example.com | grep -q "welcome" && echo "ok" || echo "missing"
忽略 ssl 证书错误(测试用)
curl -k -s -o /dev/null -w "%{http_code}" https://example.com # -k 跳过证书验证
批量检测多个 url
urls=("https://example.com" "https://google.com") for url in "${urls[@]}"; do code=$(curl -s -o /dev/null -w "%{http_code}" -l $url) echo "$url: $code" done
6. 工具选择建议
- 选 curl:需要灵活控制请求(如自定义头、超时、重定向)或调试 api。
- 选 wget:需要简单检测或集成到自动化脚本(如定时任务监控)。
到此这篇关于curl和wget检测网页状态的区别的文章就介绍到这了,更多相关curl和wget区别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论