Catalyst-Model-MultiAdaptor
view release on metacpan or search on metacpan
inc/Catalyst/Test.pm view on Meta::CPAN
my $request = Catalyst::Utils::request( shift(@_) );
_customize_request($request, @_);
my $cgi = HTTP::Request::AsCGI->new( $request, %ENV )->setup;
$class->handle_request( env => \%ENV );
my $response = $cgi->restore->response;
$response->request( $request );
return $response;
}
my $agent;
#line 248
sub remote_request {
require LWP::UserAgent;
my $request = Catalyst::Utils::request( shift(@_) );
my $server = URI->new( $ENV{CATALYST_SERVER} );
_customize_request($request, @_);
if ( $server->path =~ m|^(.+)?/$| ) {
my $path = $1;
$server->path("$path") if $path; # need to be quoted
}
# the request path needs to be sanitised if $server is using a
# non-root path due to potential overlap between request path and
# response path.
if ($server->path) {
# If request path is '/', we have to add a trailing slash to the
# final request URI
my $add_trailing = $request->uri->path eq '/';
my @sp = split '/', $server->path;
my @rp = split '/', $request->uri->path;
shift @sp;shift @rp; # leading /
if (@rp) {
foreach my $sp (@sp) {
$sp eq $rp[0] ? shift @rp : last
}
}
$request->uri->path(join '/', @rp);
if ( $add_trailing ) {
$request->uri->path( $request->uri->path . '/' );
}
}
$request->uri->scheme( $server->scheme );
$request->uri->host( $server->host );
$request->uri->port( $server->port );
$request->uri->path( $server->path . $request->uri->path );
unless ($agent) {
$agent = LWP::UserAgent->new(
keep_alive => 1,
max_redirect => 0,
timeout => 60,
# work around newer LWP max_redirect 0 bug
# http://rt.cpan.org/Ticket/Display.html?id=40260
requests_redirectable => [],
);
$agent->env_proxy;
}
return $agent->request($request);
}
sub _customize_request {
my $request = shift;
my $opts = pop(@_) || {};
$opts = {} unless ref($opts) eq 'HASH';
if ( my $host = exists $opts->{host} ? $opts->{host} : $default_host ) {
$request->header( 'Host' => $host );
}
}
#line 353
1;
( run in 2.395 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )