当使用 Fetch 从 Teamcity 下载 url 时,我收到 Fetch failed!错误。但文件的下载确实有效。
他们最近更改了我们的 Teamcity 服务器的权限,因此我在获取要下载的文件的 URL 时必须使用用户名和密码。我只是想知道这是否会导致网关的 fetch 验证出现问题,但我可以下载该文件。有没有办法抑制此错误或将其降级为警告?
Perl Code:
my $ff = File::Fetch->new(uri => "$uri");
my $where = $ff->fetch ( to => "$DOWNLOAD_LOCATION" );
print Dumper($ff);
Output:
Fetch failed! HTTP response: 502 Bad Gateway [502 notresolvable] at
<path>\myfile.pl line 249.
Dumper Output:
$VAR1 = bless( {'vol' => '',
'file_default' => 'file_default',
'_error_msg' => 'Fetch failed! HTTP response: 502 Bad Gateway [502 notresolvable]',
'file' => 'myfilename.zip',
'scheme' => 'http',
'path' => '/repository/download/buildlabel/1042086:id/',
'_error_msg_long' => 'Fetch failed! HTTP response: 502 Bad Gateway [502 notresolvable] at C:/Perl/lib/File/Fetch.pm line 598.
问题似乎是打印到的警告(消息)STDERR
。显然你没有得到die
否则程序将退出。您可以通过设置来控制打印消息的过程$SIG{__WARN__}
钩子,最好位于一个块中。
my $where;
FETCH: {
local $SIG{__WARN__} = sub {
print "WARN: @_"; # or whatever appropriate
};
$where = $ff->fetch ( to => "$DOWNLOAD_LOCATION" );
};
or
my $where = do {
local $SIG{__WARN__} = sub { print "WARN: @_" };
$ff->fetch;
};
信号的处理 – 打印到STDERR
– 在块外恢复,这就是local
提供。看这在 perlsub 中,特别是“之后的文本”Synopsis“。您也可以手动执行此操作,方法是说$SIG{__WARN__} = 'DEFAULT';
一旦你完成了。
See warn
如果有则不打印任何消息$SIG{__WARN__}
安装了处理程序。处理程序有责任按照其认为合适的方式处理消息(例如,将其转换为骰子)。
另请参阅%SIG
entry 在佩尔瓦尔
例程由$SIG{__WARN__}
当即将打印警告消息时调用。警告消息作为第一个参数传递。存在一个__WARN__
hook 会导致对 STDERR 的普通警告打印被抑制。
虽然决定什么称为“错误”和什么称为“警告”可能有点武断,但很明显,您的程序仅向STDERR
并继续。那么以上应该就足够了。
如果您被die
然后你可以将代码包装在eval.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)