linux - 如何使用 cURL 测试并等待 HTTP 服务?

标签 linux bash http curl debian

描述

我已经启动了 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/

相关文章:

linux - 如何在 linux 中使用 sed 做到这一点?

php - Composer 全局、系统范围、多用户安装

bash - 当第 N 个参数等于 "--check"时,如何确保存在 N+1 个参数

vb.net - 如何使用 VB.Net 读取从 URL 返回的内容?

c++ - 使用套接字跟踪 HTTP 响应 header

linux - 与 gcc -lnetsnmp 链接时 undefined reference

Linux命令不是很清楚

regex - 如何使用前瞻排除正则表达式中的特殊字符

macos - 什么相当于 OsX 下的 xargs -r

java - 缓存由 servlet 提供的图像