Как я могу сделать WWW: Механизировать, чтобы не получать страницы дважды? - PullRequest
3 голосов
/ 25 марта 2010

У меня есть веб-приложение, написанное на OO Perl. В приложении используется один WWW :: Mechanize объект. Как я могу сделать так, чтобы не получать один и тот же URL дважды, то есть сделать второй get() с тем же URL no-op:

my $mech = WWW::Mechanize->new();
my $url = 'http:://google.com';

$mech->get( $url ); # first time, fetch
$mech->get( $url ); # same url, do nothing

Ответы [ 3 ]

7 голосов
/ 25 марта 2010

См. WWW :: Mechanize :: Cached :

Синопсис

use WWW::Mechanize::Cached;

my $cacher = WWW::Mechanize::Cached->new;
$cacher->get( $url );

Описание

Использует иерархию Cache :: Cache для реализации механизма кэширования. Это позволяет выполнять повторные запросы без невежливого удара по серверу.

4 голосов
/ 25 марта 2010

Вы можете хранить URL-адреса и их содержимое в хэше.

my $mech = WWW::Mechanize->new();
my $url = 'http://google.com';
my %response;

$response{$url} = $mech->get($url) unless $response{$url};
2 голосов
/ 25 марта 2010

Вы можете создать подкласс WWW::Mechanize и переопределить метод get(), чтобы сделать то, что вы хотите:

package MyMech;
use base 'WWW::Mechanize';

sub get {
    my $self = shift;
    my($url) = @_;

    if (defined $self->res && $self->res->request->uri ne $url) {
        return $self->SUPER::get(@_)
    }
    return $self->res;
}
...