如何使用cURL测试和等待HTTP服务?

时间:2017-12-11 13:40:15

标签: linux bash http curl debian

描述

我启动了一个docker HTTP服务

我想等待HTTP服务启动并使用 curl

运行

生殖

我写了以下bash脚本

$ANDROID_HOME

然后我测试我的服务:

#!/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
}

预期

我期待等待服务,直到我有200个代码和HTTP响应。

结果

对于某些服务,我有HTTP服务200代码,但curl请求会继​​续重试。

问题

我的cURL命令有什么问题吗?

1 个答案:

答案 0 :(得分:2)

如果要检查HTTP 200响应代码,则应尝试查找响应头是否具有HTTP 200响应代码。

通常,响应标头包含这些信息。

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