gpt4 book ai didi

perl - 在 Perl 中使用 Mechanize 响应下载不正确的文件

转载 作者:行者123 更新时间:2023-12-01 09:28:14 25 4
gpt4 key购买 nike

我创建了一个脚本,它通过基本身份验证访问 URL。一旦我通过了凭据,它就会将文件下载到我的本地文件夹中。问题是我的文件名不正确。这是我的示例代码:

#!/usr/bin/env perl                                                             

use strict;
use warnings;
use WWW::Mechanize;
use HTTP::Cookies;

my $url = "http://sampleurl.com";
my $dir = 'C:\\pl';
my $mech = WWW::Mechanize->new();
$mech->cookie_jar(HTTP::Cookies->new());
$mech ->credentials("sampleurl.com:80", "sampleurl.com", "username", "password");
$mech->get($url);
my $res = $mech->res();
if($res->is_success){
my $filename = $res->filename();
print $filename;
$mech->save_content( $dir.'\\'.$filename, binmode => ':raw', decoded_by_headers => 1 );
print $mech->status;
}else{
print "Error";

}

exit 0;

它没有下载 sample_url.DOC,而是只下载了没有文件扩展名的示例。你能帮我解决问题吗?我想下载整个文件。

最佳答案

不能保证 $res->filename(); 会产生文件扩展名或任何与此相关的东西。例如,您当前正在阅读的页面没有文件扩展名。

您必须根据媒体类型猜测文件扩展名。

use MIME::Types qw(by_mediatype);

...

my $filename = $r->filename();
if(!$filename) { $filename = 'untitled'; }

if($filename !~ /\.[a-zA-Z0-9]{1,4}$/) {
my $type = $res->header('Content-Type');
my $ext = 'txt';

if($type) {
my @types = by_mediatype($type);

if($#types > -1) {
$ext = $types[0][0];
}
}

$filename .= '.' . $ext;
}

print $filename;

关于perl - 在 Perl 中使用 Mechanize 响应下载不正确的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20067040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com