使用Perl的File :: Fetch获取http响应头

时间:2014-12-29 22:51:01

标签: perl http-headers download

我想在Perl脚本中下载文件。

如果下载正常,这样可以正常工作,

use File::Fetch;
$ff = File::Fetch->new(uri => 'http://some.where.com/dir/a.txt');
$where = $ff->fetch() or die $ff->error;

如果出现错误,我想查看http-response标头。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

从File :: Fetch error handling documentationsource判断,您获得的是一个包含错误详细信息的字符串(例如,在您的示例中通过$ff->error)。根据用于执行实际提取的底层模块,您可能能够确定HTTP响应信息并将其解析出来。例如,如果File :: Fetch使用LWP,则以下示例错误在错误消息中包含HTTP 500:

  

提取失败! HTTP响应:500内部服务器错误[500不能   在fetch.pl第8行连接到some.where.com:80(错误的主机名)]。

请注意,如果您尝试从错误字符串中解析,您应该确定您知道正在使用哪个底层模块进行提取(例如lwp,httptiny,wget等),因为错误消息格式是不一样。

如果HTTP响应对您来说非常重要,那么切换到类似LWP的内容可能更有意义,其中此信息以编程方式一致且可靠地可用,而不必担心解析(例如通过专用response object在LWP的情况下。)

答案 1 :(得分:0)

如果仅使用HTTP URI,则以下代码应该有效。

use HTTP::Tiny;
$http = HTTP::Tiny->new();
$response = $http->mirror( $uri, $file );
use Data::Dumper;
die Dumper($response) unless $response->{'success'};