Plack-App-Prerender
view release on metacpan or search on metacpan
lib/Plack/App/Prerender.pm view on Meta::CPAN
package Plack::App::Prerender;
# ABSTRACT: a simple prerendering proxy for Plack
use v5.10.1;
use strict;
use warnings;
our $VERSION = 'v0.2.0';
use parent qw/ Plack::Component /;
use Encode qw/ encode /;
use HTTP::Headers;
use HTTP::Request;
use HTTP::Status qw/ :constants /;
use Plack::Request;
use Plack::Util;
use Plack::Util::Accessor qw/ mech rewrite cache max_age request response wait /;
use Ref::Util qw/ is_coderef is_plain_arrayref /;
use Time::Seconds qw/ ONE_HOUR /;
use WWW::Mechanize::Chrome;
# RECOMMEND PREREQ: CHI
# RECOMMEND PREREQ: Log::Log4perl
# RECOMMEND PREREQ: Ref::Util::XS
sub prepare_app {
my ($self) = @_;
unless ($self->mech) {
my $mech = WWW::Mechanize::Chrome->new(
headless => 1,
separate_session => 1,
);
$self->mech($mech);
}
unless ($self->request) {
$self->request(
{
'User-Agent' => 'X-Forwarded-User-Agent',
( map { $_ => $_ } qw/
X-Forwarded-For
X-Forwarded-Host
X-Forwarded-Port
X-Forwarded-Proto
/
),
}
);
}
if (is_plain_arrayref($self->request)) {
$self->request( { map { $_ => $_ } @{ $self->request } } );
}
unless ($self->response) {
$self->response(
{
( map { $_ => $_ } qw/
Content-Type
Expires
Last-Modified
/
),
}
);
}
if (is_plain_arrayref($self->response)) {
$self->response( { map { $_ => $_ } @{ $self->response } } );
}
unless ($self->max_age) {
$self->max_age( ONE_HOUR );
}
}
sub call {
my ($self, $env) = @_;
my $req = Plack::Request->new($env);
( run in 1.085 second using v1.01-cache-2.11-cpan-39bf76dae61 )