curlなどのコマンドがエラーなしで完了したかどうかを確認する方法


24

curlを使用して、HTTPポスト経由でファイルをサーバーにアップロードしています。

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

コマンドラインでこのコマンドを手動で実行すると、などのサーバーから応答が返されます"Upload successful"。ただし、スクリプトを使用してこのcurlコマンドを実行する場合、POST要求が成功したかどうかを確認するにはどうすればよいですか?

回答:


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 --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 -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.