Mojo::Client - Async IO HTTP 1.1 And WebSocket Client
use Mojo::Client; my $client = Mojo::Client->new; $client->async->get( 'http://kraih.com' => sub { my $self = shift; print $self->res->code; } )->process; $client->get( 'http://kraih.com' => sub { my $self = shift; print $self->res->code; } )->process; print $client->post('http://mojolicious.org')->res->body;
Mojo::Client is a full featured async io HTTP 1.1 and WebSocket client with IPv6, TLS, epoll and kqueue support.
IPv6
TLS
epoll
kqueue
It implements the most common HTTP verbs. If you need something more custom you can create your own Mojo::Transaction::HTTP objects and queue them. All of the verbs take an optional set of headers as a hash or hash reference, as well as an optional callback sub reference.
queue
Optional modules IO::KQueue, IO::Epoll, IO::Socket::INET6 and IO::Socket::SSL are supported transparently and used if installed.
Mojo::Client implements the following attributes.
app
my $app = $client->app; $client = $client->app(MyApp->new);
A Mojo application to associate this client with. If set, local requests will be processed in this application.
cookie_jar
my $cookie_jar = $client->cookie_jar; $client = $client->cookie_jar(Mojo::CookieJar->new);
Cookie jar to use for this clients requests, by default a Mojo::CookieJar object.
ioloop
my $loop = $client->ioloop; $client = $client->ioloop(Mojo::IOLoop->new);
Loop object to use for io operations, by default a Mojo::IOLoop obkect will be used.
keep_alive_timeout
my $keep_alive_timeout = $client->keep_alive_timeout; $client = $client->keep_alive_timeout(15);
Timeout in seconds for keep alive between requests, defaults to 15.
15
log
my $log = $client->log; $client = $client->log(Mojo::Log->new);
A Mojo::Log object used for logging, by default the application log will be used.
max_keep_alive_connections
my $max_keep_alive_connections = $client->max_keep_alive_connections; $client = $client->max_keep_alive_connections(5);
Maximum number of keep alive connections that the client will retain before it starts closing the oldest cached ones, defaults to 5.
5
max_redirects
my $max_redirects = $client->max_redirects; $client = $client->max_redirects(3);
Maximum number of redirects the client will follow before it fails, defaults to 3.
3
tls_ca_file
my $tls_ca_file = $client->tls_ca_file; $client = $client->tls_ca_file('/etc/tls/cacerts.pem');
TLS certificate authority file to use, defaults to the MOJO_CA_FILE environment variable. Note that IO::Socket::SSL must be installed for HTTPS support.
MOJO_CA_FILE
tls_verify_cb
my $tls_verify_cb = $client->tls_verify_cb; $client = $client->tls_verify_cb(sub {...});
Callback to verify your TLS connection, by default the client will accept most certificates. Note that IO::Socket::SSL must be installed for HTTPS support.
tx
$client->tx;
The last finished transaction, only available from callbacks.
websocket_timeout
my $websocket_timeout = $client->websocket_timeout; $client = $client->websocket_timeout(300);
Timeout in seconds for WebSockets to be idle, defaults to 300.
300
Mojo::Client inherits all methods from Mojo::Base and implements the following new ones.
new
my $client = Mojo::Client->new;
Construct a new Mojo::Client object. Use singleton if you want to share keep alive connections and cookies with other clients
singleton
async
my $async = $client->async;
Clone client instance and start using the global shared Mojo::IOLoop singleton.
$client->async->get('http://mojolicious.org' => sub { my $self = shift; print $self->res->body; })->process;
clone
my $clone = $client->clone;
Clone client instance.
delete
my $tx = $client->delete('http://kraih.com'); my $tx = $client->delete('http://kraih.com' => (Connection => 'close')); my $tx = $client->delete( 'http://kraih.com' => (Connection => 'close') => 'Hi!' ); $client = $client->delete('http://kraih.com' => sub {...}); $client = $client->delete( 'http://kraih.com' => (Connection => 'close') => sub {...} ); $client = $client->delete( 'http://kraih.com' => (Connection => 'close') => 'Hi!' => sub {...} );
Send a HTTP DELETE request.
DELETE
finish
$client->finish;
Finish the WebSocket connection, only available from callbacks.
finished
$client->finished(sub {...});
Callback signaling that peer finished the WebSocket connection, only available from callbacks.
$client->finished(sub { my $self = shift; });
get
my $tx = $client->get('http://kraih.com'); my $tx = $client->get('http://kraih.com' => (Connection => 'close')); my $tx = $client->get( 'http://kraih.com' => (Connection => 'close') => 'Hi!' ); $client = $client->get('http://kraih.com' => sub {...}); $client = $client->get( 'http://kraih.com' => (Connection => 'close') => sub {...} ); $client = $client->get( 'http://kraih.com' => (Connection => 'close') => 'Hi!' => sub {...} );
Send a HTTP GET request.
GET
head
my $tx = $client->head('http://kraih.com'); my $tx = $client->head('http://kraih.com' => (Connection => 'close')); my $tx = $client->head( 'http://kraih.com' => (Connection => 'close') => 'Hi!' ); $client = $client->head('http://kraih.com' => sub {...}); $client = $client->head( 'http://kraih.com' => (Connection => 'close') => sub {...} ); $client = $client->head( 'http://kraih.com' => (Connection => 'close') => 'Hi!' => sub {...} );
Send a HTTP HEAD request.
HEAD
post
my $tx = $client->post('http://kraih.com'); my $tx = $client->post('http://kraih.com' => (Connection => 'close')); my $tx = $client->post( 'http://kraih.com' => (Connection => 'close') => 'Hi!' ); $client = $client->post('http://kraih.com' => sub {...}); $client = $client->post( 'http://kraih.com' => (Connection => 'close') => sub {...} ); $client = $client->post( 'http://kraih.com', (Connection => 'close'), 'message body', sub {...} ); $client = $client->post( 'http://kraih.com' => (Connection => 'close') => 'Hi!' => sub {...} );
Send a HTTP POST request.
POST
post_form
my $tx = $client->post_form('http://kraih.com/foo' => {test => 123}); my $tx = $client->post_form( 'http://kraih.com/foo' 'UTF-8', {test => 123} ); my $tx = $client->post_form( 'http://kraih.com/foo', {test => 123}, {Expect => '100-continue'} ); my $tx = $client->post_form( 'http://kraih.com/foo', 'UTF-8', {test => 123}, {Expect => '100-continue'} ); $client = $client->post_form('/foo' => {test => 123}, sub {...}); $client = $client->post_form( 'http://kraih.com/foo', 'UTF-8', {test => 123}, sub {...} ); $client = $client->post_form( 'http://kraih.com/foo', {test => 123}, {Expect => '100-continue'}, sub {...} ); $client = $client->post_form( 'http://kraih.com/foo', 'UTF-8', {test => 123}, {Expect => '100-continue'}, sub {...} );
Send a HTTP POST request with form data.
process
$client = $client->process; $client = $client->process(@transactions); $client = $client->process(@transactions => sub {...});
Process all queued transactions. Will be blocking unless you have a global shared ioloop and use the async method.
put
my $tx = $client->put('http://kraih.com'); my $tx = $client->put('http://kraih.com' => (Connection => 'close')); my $tx = $client->put( 'http://kraih.com' => (Connection => 'close') => 'Hi!' ); $client = $client->put('http://kraih.com' => sub {...}); $client = $client->put( 'http://kraih.com' => (Connection => 'close') => sub {...} ); $client = $client->put( 'http://kraih.com' => (Connection => 'close') => 'Hi!' => sub {...} );
Send a HTTP PUT request.
PUT
$client = $client->queue(@transactions); $client = $client->queue(@transactions => sub {...});
Queue a list of transactions for processing. HTTP 1.1 transactions can also be pipelined by wrapping them in an arrayref. Note that following redirects and WebSocket upgrades don't work for pipelined transactions.
$client->queue([$tx, $tx2] => sub { my ($self, $p) = @_; });
receive_message
$client->receive_message(sub {...});
Receive messages via WebSocket, only available from callbacks.
$client->receive_message(sub { my ($self, $message) = @_; });
req
my $req = $client->req;
The request object of the last finished transaction, only available from callbacks.
res
my $res = $client->res;
The response object of the last finished transaction, only available from callbacks.
my $client = Mojo::Client->singleton;
The global client object, used to access a single shared client instance from everywhere inside the process.
send_message
$client->send_message('Hi there!');
Send a message via WebSocket, only available from callbacks.
websocket
$client = $client->websocket('ws://localhost:3000' => sub {...}); $client = $client->websocket( 'ws://localhost:3000' => ('User-Agent' => 'Agent 1.0') => sub {...} );
Open a WebSocket connection with transparent handshake.
Mojolicious, Mojolicious::Guides, http://mojolicious.org.
To install Mojolicious, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Mojolicious
CPAN shell
perl -MCPAN -e shell install Mojolicious
For more information on module installation, please visit the detailed CPAN module installation guide.