在Debian上控制curl输出

内森·威尔斯(Nathan Wiles)

我想运行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]."]
}
这里

您需要区分curl看到的错误和HTTP服务器返回的错误。后者不是卷曲的错误。不过,您可以通过在curl中添加选项来轻松检查http状态代码

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

这将附加到stdout的HTTP标头中,好的则为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"; }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章