linux - 如何通过 bash 脚本使用 netcat 获取 http 状态码
问题描述
我必须编写一个必须包含这些条件的 bash 脚本。我是新手,请给我一个建议好吗?
此脚本使用“命令和 [参数]”运行。我将它作为变量提供给域,脚本必须使用“nc”获取此变量的状态代码(我没有使用 cURL)。如果状态码是 200(仅),bash 脚本打印正常,否则脚本应该以状态码 7 退出,屏幕上没有任何打印字样。
我写了这个,但是当我使用变量时,我无法得到任何结果。
1-) 这行得通(这是没有变量的,我知道谷歌响应 301 所以我写了 grep 301)
#!/bin/bash
STATUS=`printf 'GET / HTTP/1.1\r\nHost: google.com\r\n\r\n' | nc google.com 80 | awk '{print $2}' | grep '301'`
if [ "$STATUS" -eq 301 ]; then
echo "OK"
else
exit 7
fi
2-) 这不起作用 - 请帮我改进这个脚本。我必须用 nc 命令编写以获取响应代码并与 200 进行比较。
#!/bin/bash
DOMAIN=google.com
STATUS=`printf 'GET / HTTP/1.1\r\nHost: "$DOMAIN"\r\n\r\n' | nc "$DOMAIN" 80 | awk '{print $2}' | grep '301'`
if [ "$STATUS" ]; then
echo "OK"
else
exit 7
fi
解决方案
如果已经整理了一个小脚本。希望有帮助。请在生产使用前进行测试:)
STATUS=$(printf "HEAD / HTTP/1.1\r\nUser-Agent: nc/0.0.1\r\nHost: $1\r\nAccept: */*\r\n\r\n" | nc $1 80 | sed -n 's/HTTP.* \(.*\) .*/\1/p' |grep $2)
if [ $? -eq 0 ]; then
echo OK
else
exit 7
fi
您的print
命令将同样工作:
STATUS=$(printf "HEAD / HTTP/1.1\r\nUser-Agent: nc/0.0.1\r\nHost: $1\r\nAccept: */*\r\n\r\n" | nc $1 80 | awk '{print $2}' |grep $2)
您使用它的方式中的 grep 将打印 200。这意味着我们必须根据实际值检查 if 块。
我正在检查最后一个退出代码。如果 grep 命令成功 - 意味着它在 HTTP 响应代码中找到 200 - 退出代码将为 0。
我正在发布脚本./demo.sh nginx.org 200
推荐阅读
- python - Python/Pandas - 根据数据框中的以下条件删除行(类似于删除重复项但不相同)
- c - 无法运行一段代码以从 C 中的用户获取不同类型的数据
- c# - 带有自定义展开区域的 C# ownerdrawn TreeView
- asp.net-core - 部分剃须刀页面不会在 ASP .NET Core 中呈现
- django - 预填充generec createview
- memory-management - 从 PySpark 和 Parquet 创建大型数组进行数据分析时,如何避免内存不足错误?
- c++ - 使用 decltype 推断其类型时,局部变量是左值吗?
- python - 有没有办法在 django 的 if 语句中呈现请求?
- python - 从 dask 数组生成向量输出
- r - 从另一列的 RANGE 调节一列的值的问题