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).
Conditional Independence Net