我处理的其中一个主机阻止我从他们的网站下载图像。我已与他们交谈,他们已要求我将用户代理libwww-perl/
更改为Mozilla/5.0
。图像链接是http和https。
我尝试了各种选项,例如
my $ua = LWP::UserAgent->new();
$ua->ssl_opts( verify_hostnames => 0 );
但我无法与getstore
合作。非常感谢任何帮助。
sub storeimage {
my $image = shift;
if ($image =~ m#^https?://.+\/(.+\.)([a-z]+)$#i) {
my $ext = $2;
my $filename = "$1$2";
if (exists $wantedfiles{$ext}) {
my $savepath = $localwantedpath.$wantedfiles{$ext};
if (!-f $savepath.$filename) {
unless (is_success(getstore($image, $savepath.$filename))) {
_warn("Couldn't download file $image to $savepath.");
return '';
}
if ( $ext =~ /jpg|jpeg/oi ) {
system("mogrify -resize '800>' -quality 70 $savepath$filename");
#mogrify -resize 800x800 -quality 70 -format jpg $imageloc
}
}
return $wantedfiles{$ext}.$filename;
}
}
return '';
}
答案 0 :(得分:4)
我不确定你为什么要搞乱SSL选项。主机名验证与HTTP标头无关。
您需要的是
my $ua = LWP::UserAgent->new(agent => 'Mozilla/5.0');
设置agent
属性。
要使用$ua
对象复制getstore
函数(来自LWP::Simple
),您需要执行以下操作:
unless ($ua->request(HTTP::Request->new('GET' => $image), $savepath.$filename)->is_success) {
...
}
请参阅request
方法。
或者可以考虑使用mirror
:
$ua->mirror($your_url, $your_filename)
但它的行为有点不同。
答案 1 :(得分:4)
LWP::Simple has a package variable与用户代理。
您可以使用它来更改代理字符串,但仍然使用getstore
。
use LWP::Simple;
$LWP::Simple::ua->agent("Mozilla...");
getstore($url, $file);
答案 2 :(得分:2)
my $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0' );