描述
我已经启动了 docker HTTP 服务
我想使用 curl 等待 HTTP 服务启动并运行
复制
我编写了以下 bash 脚本
#!/bin/bash
found_message_in_a_bottle() {
curl -H "Accept: application/json" --connect-timeout 2 -s "$1" 2>/dev/null| grep -q Welcome
}
wait_for_saltmaster() {
while ! found_message_in_a_bottle "$1"; do
echo wait for service...
sleep 1
done
}
然后我测试我的服务:
source myscript.sh
wait_for_saltmaster localhost:8080
预期
我希望等待服务,直到我有 200 代码和 HTTP 响应。
结果
对于某些服务,我有 HTTP 服务 200 代码,但curl 请求不断重试。
问题
我的 cURL 命令有什么问题吗?
最佳答案
如果您正在检查 HTTP 200 响应代码,您应该尝试查找响应 header 是否具有 HTTP 200 响应代码。
一般来说,响应 header 由这些信息组成。
HTTP/1.1 200 OK
Date: Mon, 11 Dec 2017 23:59:11 GMT
Server: Apache/2.2.32 (Unix) mod_wsgi/3.5 Python/2.7.13 PHP/7.1.8 mod_ssl/2.2.32 OpenSSL/1.0.2j DAV/2 mod_fastcgi/2.4.6 mod_perl/2.0.9 Perl/v5.24.0
X-Powered-By: PHP/7.1.8
Content-Length: 0
Content-Type: text/html; charset=UTF-8
你可以检查响应头,通过这个curl命令,提取第一行,看看是否是200 OK。
curl -H "Accept: application/json" --connect-timeout 2 -s -D - "$1" -o /dev/null 2>/dev/null | head -n1 | grep 200
关于linux - 如何使用 cURL 测试并等待 HTTP 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47754246/