名前

Mojo::Message::Request - HTTPリクエスト

使い方

use Mojo::Message::Request;

# 解析
my $req = Mojo::Message::Request->new;
$req->parse("GET /foo HTTP/1.0\x0a\x0d");
$req->parse("Content-Length: 12\x0a\x0d\x0a\x0d");
$req->parse("Content-Type: text/plain\x0a\x0d\x0a\x0d");
$req->parse('Hello World!');
say $req->method;
say $req->headers->content_type;
say $req->body;

# 構築
my $req = Mojo::Message::Request->new;
$req->url->parse('http://127.0.0.1/foo/bar');
$req->method('GET');
say $req->to_string;

説明

Mojo::Message::Requestは、 RFC 7230RFC 7231RFC 7235RFC 2817、 に基づいた HTTPリクエストのコンテナです。

属性

Mojo::Message::RequestMojo::Messageのすべての属性を 継承しており、次の新しいメソッドを実装しています。

env

my $env = $req->env;
$req    = $req->env({PATH_INFO => '/'});

利用可能であれば、環境のハッシュに直接アクセスします。

# CGIのバージョンをチェック
my $version = $req->env->{GATEWAY_INTERFACE};

# PSGIのバージョンをチェック
my $version = $req->env->{'psgi.version'};

method

my $method = $req->method;
$req       = $req->method('POST');

HTTPリクエストメソッド。デフォルトはGET

proxy

my $url = $req->proxy;
$req    = $req->proxy(Mojo::URL->new('http://127.0.0.1:3000'));

リクエストのためのプロキシURL。

reverse_proxy

my $bool = $req->reverse_proxy;
$req     = $req->reverse_proxy($bool);

リバースプロキシを通して、リクエストが実行されたか。

request_id

my $id = $req->request_id;
$req   = $req->request_id('aee7d5d8');

リクエストID、デフォルトは、合理的なユニークな値。

url

my $url = $req->url;
$req    = $req->url(Mojo::URL->new);

HTTPのリクエストURL。デフォルトはMojo::URLオブジェクト。

# リクエストの情報を取得
my $info = $req->url->to_abs->userinfo;
my $host = $req->url->to_abs->host;
my $path = $req->url->to_abs->path;

via_proxy

my $bool = $req->via_proxy;
$req     = $req->via_proxy($bool);

プロキシサーバーを通して、リクエストが実行されうるか。

メソッド

Mojo::Message::RequestMojo::Messageのすべてのメッセージを 継承しており、次の新しいメソッドを実装しています。

clone

my $clone = $req->clone;

可能であればリクエストを複製します。

cookies

my $cookies = $req->cookies;
$req        = $req->cookies(Mojo::Cookie::Request->new);
$req        = $req->cookies({name => 'foo', value => 'bar'});

リクエストのクッキーにアクセスします。通常はMojo::Cookie::Requestオブジェクトです。

# すべてのクッキーの名前
say $_->name for @{$req->cookies};

every_param

my $values = $req->every_param('foo');

cと似ていますが、同じ名前で共有されるすべての値を、 配列のリファレンスとして返却します。

# 最初の値を取得
say $req->every_param('foo')->[0];

extract_start_line

my $bool = $req->extract_start_line(\$str);

文字列からリクエストを抽出します。

fix_headers

$req = $req->fix_headers;

リクエストが、すべての必要なヘッダー を持っていることを確かにします。

get_start_line_chunk

my $bytes = $req->get_start_line_chunk($offset);

特定の位置からリクエストラインのデータを取得します。このメソッドは、リクエストをファイナライズすることに注意してください。

is_handshake

my $bool = $req->is_handshake;

websocketの値のためにUpgradeヘッダをチェックします。

is_secure

my $bool = $req->is_secure;

コネクションがセキュアかどうかをチェックします。

is_xhr

my $bool = $req->is_xhr;

XMLHttpRequestの値をあらわすためのX-Requested-Withヘッダーをチェックします。

param

my $value = $req->param('foo');

クエリ文字列とapplication/x-www-form-urlencodedmultipart/form-dataメッセージボディ を解析して GETPOSTのパラメーターにアクセスします。 もし同じ名前で共有される複数の値があり、 最後のひとつより多くの値にアクセスしたい場合は、 every_paramを使用することができます。 このメソッドはすべてのデータをキャッシュするので、 完全なリクエストボディが到着する前に呼び出さないように 注意する必要があります。 リクエストボディの各部分は、POSTパラメーターを解析するために、 メモリ上に展開されるので、大きすぎないようにする必要があります。 これには、デフォルトで16MBの制限があります。

params

my $params = $req->params;

クエリ文字列とapplication/x-www-form-urlencodedmultipart/form-dataメッセージボディ を解析して、 すべてのGETPOSTのパラメーターを取得します。通常ははMojo::Parametersオブジェクト。 このメソッドはすべてのデータをキャッシュするので、 完全なリクエストボディが到着する前に呼び出さないように 注意する必要があります。 リクエストボディの各部分は、POSTパラメーターを解析するために、 メモリ上に展開されるので、大きすぎないようにする必要があります。 これには、デフォルトで16MBの制限があります。

# パラメーター名と値を取得
my $hash = $req->params->to_hash;

parse

$req = $req->parse('GET /foo/bar HTTP/1.1');
$req = $req->parse({PATH_INFO => '/'});

HTTPリクエストの断片、あるいは環境のハッシュを解析します。

query_params

my $params = $req->query_params;

すべてのGETのパラメーター。通常はMojo::Parametersオブジェクト。

# GETパラメーターをハッシュに変換して値を取り出す
say $req->query_params->to_hash->{'foo'};

start_line_size

my $size = $req->start_line_size;

リクエストラインのバイトサイズ。このメソッドは、リクエストをファイナライズすることに注意してください。

参考

Mojolicious, Mojolicious::Guides, http://mojolicio.us.

(Mojolicious 8.12を反映。2019年5月23日更新)

関連情報