NAME

Protocol::HTTP::Request - HTTP request class

SYNOPSIS

use Protocol::HTTP::Request;

# construction of new request
my $req = Protocol::HTTP::Request->new({
    method       => METHOD_POST,
    uri          => "http://crazypanda.ru/hello/world",
    http_version => 10,
    headers      => {MyHeader => "my value"},
    cookies      => {Lorem => 'ipsum'},
});

$req->method();             # => METHOD_POST
$req->uri();                # => isa 'URI::XS'
$req->uri->to_string;       # => 'http://crazypanda.ru/hello/world'

$req->uri('/something');
$req->uri->to_string;       # => '/something'

# we accept GZIP-compressed replies
$req->allow_compression(Protocol::HTTP::Compression::gzip);

$req->cookie('Location', 'Earth');
$req->cookie('Location');           # => 'Earth'
$req->cookies;                      # => is_deeply {Location => 'Earth', 'Lorem' => 'ipsum'}

# main serialization method
$req->to_string;        # like qr/GET.*HTTP/1.0.*MyHeader.*my body/sm

# we are crazy enough to send compressed request
$req->compress(Protocol::HTTP::Compression::gzip, Protocol::HTTP::Compression::LEVEL_OPTIMAL);
# now $req->to_string would return a little bit different result

# uploading as multipart/form-data
my $req = Protocol::HTTP::Request->new({
    form => [field1 => 'value1', field2 => 'value2'],
});

my $req = Protocol::HTTP::Request->new({
    form => {
        enc_type => ENCODING_MULTIPART,
        fields   => [field1 => 'value1', field2 => 'value2'],
    },
});

# migrate from URI to form
my $req = Protocol::HTTP::Request->new({
    uri  => '/path?login=user&pass=secret',
    form => ENCODING_URL
});

DESCRIPTION

This class represents client HTTP request, which is specialization of Protocol::HTTP::Message. An instance of the class can be constructed either direcly via new method to send a new request (clients), or via parsing incoming request with Protocol::HTTP::RequestParser (servers).

If it is acceptable to have a server reply with compressed payload, then allow_compression method should be invoked. It will setup Accept-Encoding header in a request.

When a new request is ready it can be serialized via to_string method into byte octets.

METHODS

new([\%params])

Constructs new request from hashref of properties, i.e. method, uri, allow_compression, headers, body, http_version, chunked, compress, form.

See corresponding methods documentation below and in Protocol::HTTP::Message to find out what these parameters support.

allow_compression should be an array ref if multiple values are passed.

method([$method])

Get/set HTTP request method, e.g. GET, POST etc. in the first line of the request

Possible values:

METHOD_GET
METHOD_POST
METHOD_PUT
METHOD_DELETE
METHOD_OPTIONS
METHOD_HEAD
METHOD_TRACE
METHOD_CONNECT
METHOD_UNSPECIFIED

uri([$uri])

Set/get uri as URI::XS. $uri argument can be anything that one-argument constructor of URI::XS supports (for example, string).

cookies([\%cookies])

Set/get all cookies at once as a hashref.

$req->cookies({coo1 => "val1", coo2 => "val2", ... });

Please note, this is request cookies, i.e. set by client-side, and they have different API than response cookies.

cookie($name, [$value])

Set/get single cookie.

allow_compression($compression1, [$compression2, ...])

Sets acceptable compression methods in the responce of the request, i.e. Accept-Encoding header. Order of compression methods might be important.

$request->allow_compression(Protocol::HTTP::Compression::gzip);

See Protocol::HTTP::Compression for the list of available compressions.

allowed_compression()

Returns the bit mask of desirable compression methods (i.e. specified at Accept-Encoding header).

if ($request->allowed_compression & Protocol::HTTP::Compression::gzip) {
    ...;
}

See Protocol::HTTP::Compression for the list of available compressions.

to_string()

Serializes a request into string for sending via network. If the compression was requested (see Protocol::HTTP::Message), then it will be applied here.

method_str()

Returns stringified HTTP request method, e.g. "GET", "POST" etc.

form()

Allows to post data as multipart/form-data (default) or as application/x-www-form-urlencoded.

When it is encoded as multipart/form-data, the request will use the right method, e.g. if it is set to GET it will be switched to POST.

When form is empty, and it is encoded as multipart/form-data, it will move the parameters from the query part of the request URI into tht form. And vise versa, if it is encoded as application/x-www-form-urlencoded, it will add the form fields into the request URI.

Possible values for form encoding:

ENCODING_MULTIPART
ENCODING_URL

FUNCTIONS

method_str($method)

Returns corresponding string for a constant METHOD_*, i.e. "GET", "POST" etc.

SEE ALSO

Protocol::HTTP

Protocol::HTTP::Message

Protocol::HTTP::Compression

Protocol::HTTP::CookieJar

URI::XS