如何获取CURL命令在shell脚本中成功与失败的状态

时间:2019-04-06 22:00:36

标签: shell sh

使用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执行失败,我将不会在变量中获得任何值(只能为空)值)。

我的问题是,我已经尝试过if [$? -eq 0],但是对于失败,它也显示$?是0。

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

1 个答案:

答案 0 :(得分:1)

卷曲确实具有不同的退出状态,以告知程序如何完成。运行您的示例,我的退出状态为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 stdout存储在变量中的示例。

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