1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
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<WWW::OAuth::Request::HTTP_Request> is a request container for L<WWW::OAuth>
that wraps a L<HTTP::Request> object, which can be used by several user-agents
like L<LWP::UserAgent>, L<HTTP::Thin>, and L<Net::Async::HTTP>. It performs the
role L<WWW::OAuth::Request>.
=head1 ATTRIBUTES
L<WWW::OAuth::Request::HTTP_Request> implements the following attributes.
=head2 request
my $http_request = $req->request;
$req = $req->request(HTTP::Request->new(GET => $url));
L<HTTP::Request> object to authenticate.
=head1 METHODS
L<WWW::OAuth::Request::HTTP_Request> composes all methods from
L<WWW::OAuth::Request>, 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</"request">.
=head2 content_is_form
my $bool = $req->content_is_form;
Check whether L</"request"> has single-part content and a C<Content-Type>
header of C<application/x-www-form-urlencoded>.
=head2 header
my $header = $req->header('Content-Type');
$req = $req->header(Authorization => 'Basic foobar');
Set or return a request header from L</"request">.
=head2 method
my $method = $req->method;
$req = $req->method('GET');
Set or return request method from L</"request">.
=head2 request_with
$http_response = $req->request_with(LWP::UserAgent->new);
Run request with passed user-agent object, and return L<HTTP::Response> object.
User-agent may be L<LWP::UserAgent>, L<HTTP::Thin>, or L<Net::Async::HTTP>. If
run with L<Net::Async::HTTP>, the return value is a L<Future> yielding the
L<HTTP::Response> 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</"request">.
=head1 BUGS
Report any issues on the public bugtracker.
=head1 AUTHOR
Dan Book <dbook@cpan.org>
=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<LWP::UserAgent>, L<HTTP::Thin>, L<Net::Async::HTTP>
|