2017-11-30 4 views
2

私が扱うホストの1つは、自分のサイトから画像をダウンロードできないようにすることです。私は彼らに話し、彼らはユーザエージェントlibwww-perl/Mozilla/5.0に変更するように頼んだ。画像リンクはhttpとhttpsです。はこのperl関数を書き直す必要があります。 libperl UserAgentがブロックされているため

私は

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

私はこの$ ua = LWP :: UserAgent-> new(ssl_opts => {verify_hostname => 1})を試しました。 $ ua-> agent( 'Mozilla/5.0');私が把握できないのは、getstoreのような指定されたフォルダに画像を保存する方法です。あなたがLWP :: UserAgentでgetstoreを使用することはできません。 – naf

答えて

2
my $ua = LWP::UserAgent->new(agent => 'Mozilla/5.0'); 
+0

私はこの$ ua = LWP :: UserAgent-> new(ssl_opts => {verify_hostname => 1})を試しました。 $ ua-> agent( 'Mozilla/5.0');私が把握できないのは、getstoreのような指定されたフォルダに画像を保存する方法です。あなたがLWP :: UserAgentでgetstoreを使用することはできません。 – naf

4

私はあなたのSSLオプションをいじりしている理由はわかりません。ホスト名の検証はHTTPヘッダーとは関係ありません。あなたが必要なもの

agent属性を設定する

my $ua = LWP::UserAgent->new(agent => 'Mozilla/5.0'); 

のようなものです。

あなた$uaオブジェクトに(LWP::Simpleから)getstore機能を複製するには、このような何かを実行する必要があります。

unless ($ua->request(HTTP::Request->new('GET' => $image), $savepath.$filename)->is_success) { 
    ... 
} 

request方法を参照してください。

それともmirrorを使用することを検討してください:

$ua->mirror($your_url, $your_filename) 

これは、しかし、少し異なる動作をします。

4

LWP::Simple has a package variableユーザエージェントを使用します。

これを使用してエージェント文字列を変更しても、getstoreを使用することができます。

use LWP::Simple; 

$LWP::Simple::ua->agent("Mozilla..."); 
getstore($url, $file); 
関連する問題