The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Mojo::Message - HTTP 1.1 Message Base Class

SYNOPSIS

use base 'Mojo::Message';

DESCRIPTION

Mojo::Message is an abstract base class for HTTP 1.1 messages as described in RFC 2616 and RFC 2388.

ATTRIBUTES

Mojo::Message implements the following attributes.

content

my $message = $message->content;
$message    = $message->content(Mojo::Content::Single->new);

Content container, defaults to a Mojo::Content::Single object.

default_charset

my $charset = $message->default_charset;
$message    = $message->default_charset('UTF-8');

Default charset used for form data parsing.

dom_class

my $class = $message->dom_class;
$message  = $message->dom_class('Mojo::DOM');

Class to be used for DOM manipulation, defaults to Mojo::DOM. Note that this attribute is EXPERIMENTAL and might change without warning!

json_class

my $class = $message->json_class;
$message  = $message->json_class('Mojo::JSON');

Class to be used for JSON deserialization with json, defaults to Mojo::JSON. Note that this attribute is EXPERIMENTAL and might change without warning!

max_line_size

my $size = $message->max_line_size;
$message = $message->max_line_size(1024);

Maximum line size in bytes, defaults to 10240. Note that this attribute is EXPERIMENTAL and might change without warning!

max_message_size

my $size = $message->max_message_size;
$message = $message->max_message_size(1024);

Maximum message size in bytes, defaults to 5242880. Note that this attribute is EXPERIMENTAL and might change without warning!

on_finish

my $cb   = $message->on_finish;
$message = $message->on_finish(sub {
    my $self = shift;
});

Callback called after message building or parsing is finished.

on_progress

my $cb   = $message->on_progress;
$message = $message->on_progress(sub {
    my $self = shift;
    print '+';
});

Progress callback.

METHODS

Mojo::Message inherits all methods from Mojo::Base and implements the following new ones.

at_least_version

my $success = $message->at_least_version('1.1');

Check if message is at least a specific version.

body

my $string = $message->body;
$message   = $message->body('Hello!');
$message   = $message->body(sub {...});

Helper for simplified content access.

body_params

my $params = $message->body_params;

POST parameters.

body_size

my $size = $message->body_size;

Size of the body in bytes.

build_body

my $string = $message->build_body;

Render whole body.

build_headers

my $string = $message->build_headers;

Render all headers.

build_start_line

my $string = $message->build_start_line;

Render start line.

my $cookie  = $message->cookie('foo');
my @cookies = $message->cookie('foo');

Access message cookies.

dom

my $dom        = $message->dom;
my $collection = $message->dom('a[href]');

Turns content into a Mojo::DOM object and takes an optional selector to perform a find on it right away, which returns a collection. Note that this method is EXPERIMENTAL and might change without warning!

error

my $message          = $message->error;
my ($message, $code) = $message->error;
$message             = $message->error('Parser error.');
$message             = $message->error('Parser error.', 500);

Parser errors and codes.

fix_headers

$message = $message->fix_headers;

Make sure message has all required headers for the current HTTP version.

get_body_chunk

my $string = $message->get_body_chunk($offset);

Get a chunk of body data starting from a specific position.

get_header_chunk

my $string = $message->get_header_chunk($offset);

Get a chunk of header data, starting from a specific position.

get_start_line_chunk

my $string = $message->get_start_line_chunk($offset);

Get a chunk of start line data starting from a specific position.

has_leftovers

my $leftovers = $message->has_leftovers;

CHeck if message parser has leftover data.

header_size

my $size = $message->header_size;

Size of headers in bytes.

headers

my $headers = $message->headers;
$message    = $message->headers(Mojo::Headers->new);

Header container, defaults to a Mojo::Headers object.

is_chunked

my $chunked = $message->is_chunked;

Check if message content is chunked.

is_done

my $done = $message->is_done;

Check if parser is done.

is_limit_exceeded

my $limit = $message->is_limit_exceeded;

Check if message has exceeded max_line_size or max_message_size. Note that this method is EXPERIMENTAL and might change without warning!

is_multipart

my $multipart = $message->is_multipart;

Check if message content is multipart.

json

my $object = $message->json;
my $array  = $message->json;

Decode JSON message body directly using Mojo::JSON if possible, returns undef otherwise. Note that this method is EXPERIMENTAL and might change without warning!

leftovers

my $bytes = $message->leftovers;

Remove leftover data.

param

my $param  = $message->param('foo');
my @params = $message->param('foo');

Access GET and POST parameters.

parse

$message = $message->parse('HTTP/1.1 200 OK...');

Parse message chunk.

parse_until_body

$message = $message->parse_until_body('HTTP/1.1 200 OK...');

Parse message chunk until the body is reached.

start_line_size

my $size = $message->start_line_size;

Size of the start line in bytes.

to_string

my $string = $message->to_string;

Render whole message.

upload

my $upload  = $message->upload('foo');
my @uploads = $message->upload('foo');

Access file uploads.

uploads

my $uploads = $message->uploads;

All file uploads.

version

my $version = $message->version;
$message    = $message->version('1.1');

HTTP version of message.

write

$message->write('Hello!');
$message->write('Hello!', sub {...});

Write dynamic content, the optional drain callback will be invoked once all data has been written. Note that this method is EXPERIMENTAL and might change without warning!

write_chunk

$message->write_chunk('Hello!');
$message->write_chunk('Hello!', sub {...});

Write chunked content, the optional drain callback will be invoked once all data has been written. Note that this method is EXPERIMENTAL and might change without warning!

SEE ALSO

Mojolicious, Mojolicious::Guides, http://mojolicious.org.