使用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命令的状态?请帮助
答案 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