Answers:
最简单的方法是存储响应并进行比较:
$ response=$(curl -X POST -d@myfile.txt server-URL);
$ if [ "Upload successful" == "${response}" ]; then … fi;
我还没有测试过。语法可能不正确,但这就是想法。我敢肯定,有更复杂的方法可以做到,例如检查curl的退出代码等。
curl
返回相当多的退出代码。我猜测发布失败可能会导致,55 Failed sending network data.
因此您可以通过与$?
(Expands to the exit status of the most recently executed foreground pipeline.
)进行比较来确保退出代码为零:
$ curl -X POST -d@myfile.txt server-URL;
$ if [ 0 -eq $? ]; then … fi;
或者,如果您的命令相对较短,并且想要在失败时执行某些操作,则可以将退出代码作为条件语句中的条件:
$ if curl --fail -X POST -d@myfile.txt server-URL; then
# …(success)
else
# …(failure)
fi;
我认为通常首选这种格式,但我个人认为它的可读性较差。
您可能可以使用curl's --fail
option,尽管您应该先对其进行一次测试。
man curl
-f,--fail(HTTP)在服务器错误时以静默方式失败(根本没有输出)。这样做主要是为了更好地使脚本等能够更好地处理失败的尝试。在正常情况下,当HTTP服务器无法交付文档时,它会返回一个HTML文档,说明其内容(通常还说明原因以及更多内容)。该标志将阻止卷曲输出,并返回错误22。
This method is not fail-safe and there are occasions where non- successful response codes will slip through, especially when authentication is involved (response codes 401 and 407).
这样,您可以执行以下操作:
args="-X POST -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
echo "OH NO!"