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 7230、 RFC 7231、 RFC 7235、 RFC 2817、 に基づいた HTTPリクエストのコンテナです。
属性
Mojo::Message::RequestはMojo::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::RequestはMojo::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-urlencoded
、multipart/form-data
メッセージボディ を解析して GET
とPOST
のパラメーターにアクセスします。 もし同じ名前で共有される複数の値があり、 最後のひとつより多くの値にアクセスしたい場合は、 every_param
を使用することができます。 このメソッドはすべてのデータをキャッシュするので、 完全なリクエストボディが到着する前に呼び出さないように 注意する必要があります。 リクエストボディの各部分は、POSTパラメーターを解析するために、 メモリ上に展開されるので、大きすぎないようにする必要があります。 これには、デフォルトで16MBの制限があります。
params
my $params = $req->params;
クエリ文字列とapplication/x-www-form-urlencoded
、multipart/form-data
メッセージボディ を解析して、 すべてのGET
とPOST
のパラメーターを取得します。通常はは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日更新)