From a4aa216c9076a89fe0f26d323b6da72b2ed984bc Mon Sep 17 00:00:00 2001 From: Gianni Ceccarelli Date: Fri, 14 Dec 2012 14:09:57 +0000 Subject: custom user agent --- lib/Feed.pm | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/Feed.pm b/lib/Feed.pm index 3159176..26cc26e 100644 --- a/lib/Feed.pm +++ b/lib/Feed.pm @@ -3,9 +3,12 @@ use Moose; use namespace::autoclean; use 5.012; use MooseX::Types::URI 'Uri'; +use Moose::Util::TypeConstraints; with 'MooseX::Traits'; use XML::Feed; use Log::Log4perl; +use LWP::UserAgent; +use URI::Fetch; sub log { my ($self) = @_; @@ -23,6 +26,17 @@ has uri => ( required => 1, ); +duck_type 'UA' => [ 'get' ]; +coerce 'UA', from 'Str', via { __PACKAGE__->build_user_agent($_) }; + +has user_agent => ( + is => 'ro', + isa => 'UA', + coerce => 1, + lazy_build => 1, + builder => 'build_user_agent', +); + has feed => ( is => 'ro', isa => 'XML::Feed', @@ -55,6 +69,28 @@ has _entries => ( }, ); +sub build_user_agent { + my ($self,$agent_id) = @_; + + $agent_id //= 'curl/7.26.0'; + + require IO::Socket::SSL; + + return LWP::UserAgent->new( + agent => $agent_id, + ssl_opts => { + verify_hostname => 0, + SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE(), + }, + timeout => 30, + cookie_jar => {}, + protocols_allowed => [ 'http', 'https'], + default_headers => HTTP::Request->new( + Accept => '*/*', + ), + ); +} + sub process { my ($self) = @_; @@ -72,9 +108,16 @@ sub process { sub get_feed { my ($self) = @_; - $self->log->trace('get_feed'); + $self->log->trace('get_feed ' . $self->uri); + + my $response = $self->user_agent->get($self->uri); + + die sprintf('Got code "%s" processing feed %s',$response->status_line,$self->uri) + unless $response->is_success; + + my $content = $response->content; - return XML::Feed->parse($self->uri) + return XML::Feed->parse(\$content) or die XML::Feed->errstr; } -- cgit v1.2.3