在这个线程中:https://superuser.com/questions/569092/how-to-split-the-http-error-code-from-the-contents-in-curl
这部分的意思是:
if [[ $RET -ne 0 ]] ; then
# if error exit code, print exit code
echo "Error $RET"
我想用它作为错误处理,但是一旦我返回 400,它仍然会回复 else 上的部分,只是显示代码,所以我不确定这个条件是什么?这是 https 状态代码还是请求失败?请描述的更详细谢谢
抱歉,我无法添加评论:( 所以这就是新问题的原因
答案1
看看你提到的这个问题,我们看到以下内容:
OUT=$( curl -qSfsw '\n%{http_code}' http://superuser.com ) 2>/dev/null
# get exit code
RET=$?
if [[ $RET -ne 0 ]] ; then
# if error exit code, print exit code
echo "Error $RET"
...
else
...
fi
内置$?
变量是一个特殊变量,包含先前运行命令的返回代码,在本例中为curl
。请注意,这是返回码由curl
二进制文件返回到 shell,不是HTTP 状态代码,在该示例中是控制台输出的curl
。
OUT= ...
因此,除非该行和RET=$?
which overwrites之间有一些命令$?
,否则即使发生错误,您的curl
实现也会发出返回代码(这很奇怪,因为在这种情况下该选项指示返回)。0
400
-f
curl
22
顺便说一句请注意该声明
OUT=$( curl ... ) 2>/dev/null
没有意义;它应该是
OUT="$( curl ... 2>/dev/null )"