package WWW::OAuth::Request::HTTP_Request; use strict; use warnings; use Class::Tiny::Chained 'request'; use Carp 'croak'; use Scalar::Util 'blessed'; use Role::Tiny::With; with 'WWW::OAuth::Request'; our $VERSION = '1.003'; sub method { my $self = shift; return $self->request->method unless @_; $self->request->method(shift); return $self; } sub url { my $self = shift; return $self->request->uri->as_string unless @_; $self->request->uri(shift); return $self; } sub content { my $self = shift; return $self->request->content unless @_; $self->request->content(shift); return $self; } sub content_is_form { my $self = shift; my @parts = $self->request->parts; return 0 if @parts; my $content_type = $self->request->headers->content_type; return 0 unless defined $content_type and $content_type =~ m!application/x-www-form-urlencoded!i; return 1; } sub header { my $self = shift; my $name = shift; croak 'No header to set/retrieve' unless defined $name; return scalar $self->request->header($name) unless @_; $self->request->header($name => shift); return $self; } sub request_with { my ($self, $ua) = @_; croak 'Invalid user-agent object' unless blessed $ua; if ($ua->isa('LWP::UserAgent') or $ua->isa('HTTP::Thin')) { return $ua->request($self->request); } elsif ($ua->isa('Net::Async::HTTP')) { return $ua->do_request(request => $self->request); } else { my $class = blessed $ua; croak "Unknown user-agent class $class"; } } 1; =head1 NAME WWW::OAuth::Request::HTTP_Request - HTTP Request container for HTTP::Request =head1 SYNOPSIS my $req = WWW::OAuth::Request::HTTP_Request->new(request => $http_request); $req->request_with(LWP::UserAgent->new); =head1 DESCRIPTION L is a request container for L that wraps a L object, which can be used by several user-agents like L, L, and L. It performs the role L. =head1 ATTRIBUTES L implements the following attributes. =head2 request my $http_request = $req->request; $req = $req->request(HTTP::Request->new(GET => $url)); L object to authenticate. =head1 METHODS L composes all methods from L, and implements the following new ones. =head2 content my $content = $req->content; $req = $req->content('foo=1&bar=2'); Set or return request content from L. =head2 content_is_form my $bool = $req->content_is_form; Check whether L has single-part content and a C header of C. =head2 header my $header = $req->header('Content-Type'); $req = $req->header(Authorization => 'Basic foobar'); Set or return a request header from L. =head2 method my $method = $req->method; $req = $req->method('GET'); Set or return request method from L. =head2 request_with $http_response = $req->request_with(LWP::UserAgent->new); Run request with passed user-agent object, and return L object. User-agent may be L, L, or L. If run with L, the return value is a L yielding the L object as in L<< "do_request" in Net::Async::HTTP|Net::Async::HTTP/"$response = $http->do_request( %args )->get" >>. =head2 url my $url = $req->url; $req = $req->url('http://example.com/api/'); Set or return request URL from L. =head1 BUGS Report any issues on the public bugtracker. =head1 AUTHOR Dan Book =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2015 by Dan Book. This is free software, licensed under: The Artistic License 2.0 (GPL Compatible) =head1 SEE ALSO L, L, L