Conditional Independence Net

This website uses Javascript to render markdown documents in your browser, apply syntax highlighting to code fragments and render $\LaTeX$ formulas. Below is the markdown source code of this page. You can either read that or enable Javascript to have it rendered to HTML.

# NAME

Mojo::Transaction::HTTP - HTTP transaction

# SYNOPSIS

    use Mojo::Transaction::HTTP;

    # Client
    my $tx = Mojo::Transaction::HTTP->new;
    $tx->req->method('GET');
    $tx->req->url->parse('http://example.com');
    $tx->req->headers->accept('application/json');
    say $tx->res->code;
    say $tx->res->headers->content_type;
    say $tx->res->body;
    say $tx->remote_address;

    # Server
    my $tx = Mojo::Transaction::HTTP->new;
    say $tx->req->method;
    say $tx->req->url->to_abs;
    say $tx->req->headers->accept;
    say $tx->remote_address;
    $tx->res->code(200);
    $tx->res->headers->content_type('text/plain');
    $tx->res->body('Hello World!');

# DESCRIPTION

[Mojo::Transaction::HTTP](/doc/Mojo%3A%3ATransaction%3A%3AHTTP) is a container for HTTP transactions, based on [RFC
7230](https://tools.ietf.org/html/rfc7230) and [RFC 7231](https://tools.ietf.org/html/rfc7231).

# EVENTS

[Mojo::Transaction::HTTP](/doc/Mojo%3A%3ATransaction%3A%3AHTTP) inherits all events from [Mojo::Transaction](/doc/Mojo%3A%3ATransaction) and can emit the following new ones.

## request

    $tx->on(request => sub ($tx) {...});

Emitted when a request is ready and needs to be handled.

    $tx->on(request => sub ($tx) { $tx->res->headers->header('X-Bender' => 'Bite my shiny metal ass!') });

## resume

    $tx->on(resume => sub ($tx) {...});

Emitted when transaction is resumed.

## unexpected

    $tx->on(unexpected => sub ($tx, $res) {...});

Emitted for unexpected `1xx` responses that will be ignored.

    $tx->on(unexpected => sub ($tx) { $tx->res->on(finish => sub { say 'Follow-up response is finished.' }) });

# ATTRIBUTES

[Mojo::Transaction::HTTP](/doc/Mojo%3A%3ATransaction%3A%3AHTTP) inherits all attributes from [Mojo::Transaction](/doc/Mojo%3A%3ATransaction) and implements the following new ones.

## previous

    my $previous = $tx->previous;
    $tx          = $tx->previous(Mojo::Transaction::HTTP->new);

Previous transaction that triggered this follow-up transaction, usually a [Mojo::Transaction::HTTP](/doc/Mojo%3A%3ATransaction%3A%3AHTTP) object.

    # Paths of previous requests
    say $tx->previous->previous->req->url->path;
    say $tx->previous->req->url->path;

# METHODS

[Mojo::Transaction::HTTP](/doc/Mojo%3A%3ATransaction%3A%3AHTTP) inherits all methods from [Mojo::Transaction](/doc/Mojo%3A%3ATransaction) and implements the following new ones.

## client\_read

    $tx->client_read($bytes);

Read data client-side, used to implement user agents such as [Mojo::UserAgent](/doc/Mojo%3A%3AUserAgent).

## client\_write

    my $bytes = $tx->client_write;

Write data client-side, used to implement user agents such as [Mojo::UserAgent](/doc/Mojo%3A%3AUserAgent).

## is\_empty

    my $bool = $tx->is_empty;

Check transaction for `HEAD` request and `1xx`, `204` or `304` response.

## keep\_alive

    my $bool = $tx->keep_alive;

Check if connection can be kept alive.

## redirects

    my $redirects = $tx->redirects;

Return an array reference with all previous transactions that preceded this follow-up transaction.

    # Paths of all previous requests
    say $_->req->url->path for @{$tx->redirects};

## resume

    $tx = $tx->resume;

Resume transaction.

## server\_read

    $tx->server_read($bytes);

Read data server-side, used to implement web servers such as [Mojo::Server::Daemon](/doc/Mojo%3A%3AServer%3A%3ADaemon).

## server\_write

    my $bytes = $tx->server_write;

Write data server-side, used to implement web servers such as [Mojo::Server::Daemon](/doc/Mojo%3A%3AServer%3A%3ADaemon).

# SEE ALSO

[Mojolicious](/doc/Mojolicious), [Mojolicious::Guides](/doc/Mojolicious%3A%3AGuides), [https://mojolicious.org](https://mojolicious.org).