【问题标题】:How to check if curl was successful and print a message?如何检查 curl 是否成功并打印消息?
【发布时间】:2016-12-18 17:33:22
【问题描述】:

我正在尝试使用 IF Else 条件进行 CURL。调用成功时打印成功消息,否则打印调用失败。

我的示例卷发看起来像:

curl 'https://xxxx:1234xxxx@abc.dfghj.com/xl_template.get_web_query?id=1035066' > HTML_Output.html

我想用 Shell 做同样的事情。

使用 JavaScript:

if(res.status === 200){console.log("Yes!! The request was successful")}
else {console.log("CURL Failed")}

另外,我看到了 CURL 百分比,但我不知道如何检查 CURL 的百分比。请帮忙。

CURL 输出

【问题讨论】:

  • 使用curl --fail并将返回码与表示失败的22进行比较

标签: bash shell unix curl terminal


【解决方案1】:

您可以使用 curl 的-w (--write-out) 选项来打印 HTTP 代码:

curl -s -w '%{http_code}\n' 'https://xxxx:1234xxxx@abc.dfghj.com/xl_template.get_web_query?id=1035066'

它将显示站点返回的 HTTP 代码。

另外curl为各种场景提供了一大堆退出代码,查看man curl

【讨论】:

  • 即使失败,HTTP 代码也会一直打印为204,这正常吗?
  • @alper 这就是您请求的 URL 作为响应发送的状态码,实际上与 curl 无关。
【解决方案2】:

像大多数程序一样,curl 在遇到错误时返回非零退出状态,因此您可以使用if 对其进行测试。

if curl 'https://xxxx:1234xxxx@abc.dfghj.com/xl_template.get_web_query?id=1035066' > HTML_Output
then echo "Request was successful"
else echo "CURL Failed"
fi

如果中途下载失败,我不知道有什么方法可以找出百分比。

【讨论】:

  • 非 200 码也会返回成功。见superuser.com/questions/272265/…
  • 那是因为一些成功的请求有非200码。重定向被认为是成功的,但它会返回一个 3xx 代码。
【解决方案3】:

实现这一点的一种方法,

HTTPS_URL="https://xxxx:1234xxxx@abc.dfghj.com/xl_template.get_web_query?id=1035066"
CURL_CMD="curl -w httpcode=%{http_code}"

# -m, --max-time <seconds> FOR curl operation
CURL_MAX_CONNECTION_TIMEOUT="-m 100"

# perform curl operation
CURL_RETURN_CODE=0
CURL_OUTPUT=`${CURL_CMD} ${CURL_MAX_CONNECTION_TIMEOUT} ${HTTPS_URL} 2> /dev/null` || CURL_RETURN_CODE=$?
if [ ${CURL_RETURN_CODE} -ne 0 ]; then  
    echo "Curl connection failed with return code - ${CURL_RETURN_CODE}"
else
    echo "Curl connection success"
    # Check http code for curl operation/response in  CURL_OUTPUT
    httpCode=$(echo "${CURL_OUTPUT}" | sed -e 's/.*\httpcode=//')
    if [ ${httpCode} -ne 200 ]; then
        echo "Curl operation/command failed due to server return code - ${httpCode}"
    fi
fi

【讨论】:

  • 感谢您的回复。我想将文件保存为 html,如何在上面的代码中执行此操作? curl "xxxx:1234xxxx@abc.dfghj.com/…" > Html_Output.html 以及 "-m 100" 需要花费很多时间才能看到终端上打印的内容。当我减少 10 到 20 之间的时间时,我看到一条连接失败消息
猜你喜欢
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多