The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Plack::Request - Portable HTTP request object from PSGI env hash

SYNOPSIS

  use Plack::Request;

  sub psgi_handler {
      my $env = shift;
      my $req = Plack::Request->new($env);
      my $res = $req->new_response(200);
      $res->content_type('text/html');
      $res->body("Hello World");
      return $res->finalize;
  }

DESCRIPTION

Plack::Request provides a consistent API for request objects across web server environments.

CAVEAT

Note that this module is intended to be used by web application framework developers rather than application developers (end users). Writing your web application directly using Plack::Request is certainly possible but not recommended: it's like doing so with mod_perl's Apache::Request: yet too low level.

If you're writing a web application, not a framework, then you're encouraged to use one of the web application frameworks that support PSGI, or use HTTP::Engine if you want to write a micro web server application.

Also, even if you're a framework developer, you probably want to handle Cookies and file uploads in your own way: Plack::Request gives you a simple API to deal with these things but ultimately you probably want to implement those in your own code.

METHODS

new

    Plack::Request->new( $psgi_env );

ATTRIBUTES

address

Returns the IP address of the client.

cookies

Returns a reference to a hash containing the cookies

method

Contains the request method (GET, POST, HEAD, etc).

protocol

Returns the protocol (HTTP/1.0 or HTTP/1.1) used for the current request.

request_uri

Returns the request uri (like $ENV{REQUEST_URI})

query_parameters

Returns a reference to a hash containing query string (GET) parameters. Values can be either a scalar or an arrayref containing scalars.

secure

Returns true or false, indicating whether the connection is secure (https).

uri

Returns a URI object for the current request. Stringifies to the URI text.

user

Returns REMOTE_USER.

raw_body

Returns string containing body(POST).

headers

Returns an HTTP::Headers object containing the headers for the current request.

hostname

Returns the hostname of the client.

parameters

Returns a reference to a hash containing GET and POST parameters. Values can be either a scalar or an arrayref containing scalars.

uploads

Returns a reference to a hash containing uploads. Values can be either a Plack::Request::Upload object, or an arrayref of Plack::Request::Upload objects.

content_encoding

Shortcut to $req->headers->content_encoding.

content_length

Shortcut to $req->headers->content_length.

content_type

Shortcut to $req->headers->content_type.

Shortcut to $req->headers->header.

referer

Shortcut to $req->headers->referer.

user_agent

Shortcut to $req->headers->user_agent.

A convenient method to access $req->cookies.

    $cookie  = $req->cookie('name');
    @cookies = $req->cookie;
param

Returns GET and POST parameters with a CGI.pm-compatible param method. This is an alternative method for accessing parameters in $req->parameters.

    $value  = $req->param( 'foo' );
    @values = $req->param( 'foo' );
    @params = $req->param;

Like CGI, and unlike earlier versions of Catalyst, passing multiple arguments to this method, like this:

    $req->param( 'foo', 'bar', 'gorch', 'quxx' );

will set the parameter foo to the multiple values bar, gorch and quxx. Previously this would have added bar as another value to foo (creating it if it didn't exist before), and quxx as another value for gorch.

path

Returns the path, i.e. the part of the URI after $req->base, for the current request.

upload

A convenient method to access $req->uploads.

    $upload  = $req->upload('field');
    @uploads = $req->upload('field');
    @fields  = $req->upload;

    for my $upload ( $req->upload('field') ) {
        print $upload->filename;
    }
new_response
  my $res = $req->new_response;

Creates a new Plack::Response by default. Handy to remove dependency on Plack::Response in your code for easy subclassing and duck typing in web application frameworks, as well as overriding Response generation in middlewares.

AUTHORS

Kazuhiro Osawa

Tokuhiro Matsuno

SEE ALSO

Plack::Response HTTP::Request, Catalyst::Request

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.