App-Zapzi
view release on metacpan or search on metacpan
lib/App/Zapzi/Fetchers/URL.pm view on Meta::CPAN
package App::Zapzi::Fetchers::URL;
# ABSTRACT: fetch article via URL
use utf8;
use strict;
use warnings;
our $VERSION = '0.017'; # VERSION
use Carp;
use Data::Validate::URI 0.06;
use HTTP::Tiny;
use HTTP::CookieJar;
use Moo;
with 'App::Zapzi::Roles::Fetcher';
sub name
{
return 'URL';
}
sub handles
{
my $self = shift;
my $source = shift;
my $v = Data::Validate::URI->new();
my $url = $v->is_web_uri($source) || $v->is_web_uri('http://' . $source);
return $url;
}
sub fetch
{
my $self = shift;
my $jar = HTTP::CookieJar->new;
my $http = HTTP::Tiny->new(cookie_jar => $jar);
my $url = $self->source;
my $response = $http->get($url, $self->_http_request_headers());
if (! $response->{success} || ! length($response->{content}))
{
my $error = "Failed to fetch $url: ";
if ($response->{status} == 599)
{
# Internal exception to HTTP::Tiny
$error .= $response->{content};
}
else
{
# Error details from remote server
$error .= $response->{status} . " ";
$error .= $response->{reason};
}
$self->_set_error($error);
return;
}
$self->_set_text($response->{content});
$self->_set_content_type($response->{headers}->{'content-type'});
return 1;
}
sub _http_request_headers
{
my $self = shift;
my $ua = "App::Zapzi";
no strict 'vars'; ## no critic - $VERSION does not exist in dev
$ua .= "/$VERSION" if defined $VERSION;
return {headers => {
'User-agent' => $ua,
# Don't gzip encode the response
'Accept-encoding' => 'identity'
}};
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
App::Zapzi::Fetchers::URL - fetch article via URL
=head1 VERSION
version 0.017
( run in 0.937 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )