カールなどのコマンドがエラーなしで完了したことを確認するには?

カールなどのコマンドがエラーなしで完了したことを確認するには?

カールを使用してHTTPポストを介してサーバーにファイルをアップロードしています。

curl -X POST [email protected] server-URL

コマンドラインからこのコマンドを手動で実行すると、サーバーから応答を受け取ります(例:)"Upload successful"。しかし、スクリプトを介してこのカールコマンドを実行したい場合は、POSTリクエストが成功したことをどうやって知ることができますか?

答え1

curl's --failオプションを使用することもできますが、まずテストする必要があります。

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 [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かなり多くの終了コードを返します。失敗した投稿のため、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;

私の考えでは、この形式一般的に好むが、個人的には読みにくいと思います。

関連情報