如何检查curl等命令是否正确完成?


24

我正在使用curl通过HTTP发布将文件上传到服务器。

curl -X POST -d@myfile.txt server-URL

当我在命令行上手动执行此命令时,我从服务器收到响应,如"Upload successful"。但是,如何通过脚本执行curl命令,如何确定POST请求是否成功?

Answers:


21

最简单的方法是存储响应并进行比较:

$ 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;

我认为通常首选这种格式,但我个人认为它的可读性较差。


20

您可能可以使用curl's --failoption,尽管您应该先对其进行一次测试。

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!"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.