Debianのカール出力制御

Debianのカール出力制御

curlコマンドを実行し、エラーが発生した場合にのみstdoutにコンテンツを書きたいと思います。

端末でコマンドを実行するときは、デフォルトでこの機能を使用します。 Perlスクリプト( ``)でコマンドを実行すると、進捗情報が出力されますが、エラーメッセージは出力されません。

-s()フラグを追加して進行情報を非表示にすることはできますが--silent、bashランタイムに直接表示されるようにエラーを強制的に表示することはできません。-S( ) フラグは--show-errors何の効果もないようです。

また、出力を/ etc / nullに切り替えようとしましたが、まったく出力されないようです。

my $curl_result = `curl -s -S -X PUT "$url" -H "$h1" -H "$h2" -H "$h3"  -d  "$data"`;

以下は、私が探しているエラーの種類の例です。これは、意図的に誤ったIP形式が原因で発生します。

{
    "code":"INVALID_RECORDS",
    "message":"One or more of the given records is invalid",
    "fields": [{
        "code":"INVALID_RECORDS",
        "message":"Invalid [ipaddress] provided for record data, [test].",
        "path":"records"
    }],
    "name":"ApiError",
    "errors":["Invalid [ipaddress] provided for record data, [test]."]
}

ベストアンサー1

カールに表示されるエラーとhttpサーバーから返されたエラーとを区別する必要があります。後者はカールのせいではありません。ただし、カールにオプションを追加すると、簡単にhttpステータスコードを確認できます。

 -w '\n%{http_code}\n'

これにより、stdoutにHTTPヘッダーが追加されます。これはOKの場合は200です。だからあなたのPerlは次のことをすることができます

my $curl_result = `curl -s -S -w '\n%{http_code}\n' ... 2>/dev/null`;
my @lines = split(/\n/,$curl_result);
my $httpcode = $lines[-1];
if($httpcode eq 200){ print "ok\n"; }
else{ print "error\n"; }

おすすめ記事