【问题标题】:how to get status of CURL command for success and failures in shell script [duplicate]如何在shell脚本中获取CURL命令的成功和失败状态[重复]
【发布时间】:2019-08-28 10:43:53
【问题描述】:

我在使用 shell 执行 CURL 命令时遇到了一个问题。问题是我想获取 curl 命令执行的状态。

我的命令是:

    location=curl https://invvvv.usvvv.com/agg/tari?uswg-key=8e3eedhhhh4a9a370605637 --output output.zip --proxy proxy-az.azure.ghop.fguiop.com:8080

问题是如果成功,那么我将在 ${location} 变量中获得一个位置,这很好。但是如果 CURL 执行失败,我不会在变量中获得任何值(只有空值)。

我的问题是如何获取 curl 命令执行的状态,我尝试过使用 if [ $? -eq 0 ],但对于失败也显示 $?为 0。

如何获取 curl 命令的状态?请帮忙

【问题讨论】:

  • if location=$(curl --fail ...); then ...do the success thing...; else ...do the failure thing...; fi
  • 如果我的 curl 成功,那么它将下载 zip 文件 output.zip.... 否则需要一个机制

标签: shell sh


【解决方案1】:

Curl 确实有不同的退出状态来通知程序是如何完成的。运行您的示例,我得到退出状态 5“无法解析代理”,然后是 6“无法解析主机”。您可以在此处查看 Curl 退出状态列表:https://ec.haxx.se/usingcurl-returns.html

curl https://invvvv.usvvv.com/agg/tari?uswg-key=8e3eedhhhh4a9a370605637 --output output.zip --proxy proxy-az.azure.ghop.fguiop.com:8080 ; echo "RETURN CODE: $?"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (5) Could not resolve proxy: proxy-az.azure.ghop.fguiop.com
RETURN CODE: 5

curl https://invvvv.usvvv.com/agg/tari?uswg-key=8e3eedhhhh4a9a370605637 --output output.zip ; echo "RETURN CODE: $?"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: invvvv.usvvv.com
RETURN CODE: 6

实际上,我在运行示例行时遇到了错误,如果你想捕获程序的标准输出,你可以将它包含在 $() 之间。虽然,您正在使用 --output output.zip 重定向标准输出。

这是一个将 curl 标准输出存储在变量中的示例。

location=$(curl example.com)
if [ $? -eq 0 ]; then 
    echo "Success" 
else 
    echo "Failure $?" 
fi
echo $location

但是,如果您要测试的是 HTTP 响应代码,则可以使用下面的示例。

curl -s -o response.txt -w "%{http_code}" http://example.com

更多详情请点击此处Curl to return http status code along with the response

【讨论】:

  • 如果您只是进行零/非零确定,则没有理由使用$?if location=$(curl example.com); then 将测试curl 是否返回零退出状态,但不会冒$? 被额外的日志记录命令、调试陷阱等中断的风险。另请参阅BashPitfalls #44
  • ...和echo $locationBashPitfalls #14 发生冲突。
猜你喜欢
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2014-02-01
  • 1970-01-01
相关资源
最近更新 更多