我想运行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] 删除。
我来说两句