我正在使用curl 通过 HTTP post 将文件上传到服务器。
curl -X POST [email protected] server-URL
当我在命令行上手动执行此命令时,我收到来自服务器的响应,例如"Upload successful"
.但是,如果我想通过脚本执行这个curl命令,我怎样才能知道我的POST请求是否成功呢?
答案1
您也许可以使用curl's --fail
选项,但您应该先测试一次。
man curl
-f, --fail (HTTP) 在服务器出现错误时静默失败(根本没有输出)。这样做主要是为了更好地启用脚本等来更好地处理失败的尝试。在正常情况下,当 HTTP 服务器无法传递文档时,它会返回一个 HTML 文档来说明情况(通常还描述了原因及更多信息)。该标志将阻止curl输出该信息并返回错误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 [email protected] server-URL"
curl -f $args && echo "SUCCESS!" ||
echo "OH NO!"
答案2
最简单的方法是存储响应并进行比较:
$ response=$(curl -X POST [email protected] 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 [email protected] server-URL;
$ if [ 0 -eq $? ]; then … fi;
或者,如果您的命令相对较短,并且您想在失败时执行某些操作,则可以依赖退出代码作为条件语句中的条件:
$ if curl --fail -X POST [email protected] server-URL; then
# …(success)
else
# …(failure)
fi;
我觉得这个格式通常是首选,但我个人觉得它的可读性较差。