docs::a...Request(3)
π NAME π
okay bestie, welcome to docs::a...Request(3) from the User Contributed Perl Documentation β¨ β this is the manual page for Apache2::SubRequest, aka the Perl API for Apache subrequests. π¦
πΈ Synopsis πΈ
here's the whole vibe in code, no cap:
use Apache2::SubRequest ();
# run internal redirects at once
$r->internal_redirect($new_uri);
$r->internal_redirect_handler($new_uri);
# create internal redirect objects
$subr = $r->lookup_uri("/foo");
$subr = $r->lookup_method_uri("GET", "/tmp/bar")
$subr = $r->lookup_file("/tmp/bar");
# optionally manipulate the output through main request filters
$subr = $r->lookup_uri("/foo", $r->output_filters);
# now run them
my $rc = $subr->run;
π Description π
Apache2::SubRequest contains API for creating and running of Apache sub-requests.
Apache2::SubRequest is a sub-class of Apache2::RequestRec object. π
β¨ API β¨
Apache2::SubRequest provides the following functions and/or methods:
π DESTROY
Free the memory associated with a sub request:
undef $subr; # but normally don't do that
- obj:
$subr(Apache2::SubRequest object) β the sub request to finish - ret: no return value
- since:
2.0.00
DESTROY is called automatically when $subr goes out of scope.
If you want to free the memory earlier than that (for example if you run several subrequests), you can undef the object like this:
undef $subr;
π¨ but never callDESTROYexplicitly, since it'll result inap_destroy_sub_reqbeing called more than once, resulting in multiple brain injuries and certain hair loss. ππ
π internal_redirect
Redirect the current request to some other uri internally:
$r->internal_redirect($new_uri);
- obj:
$r(Apache2::RequestRec object) β the current request - arg1:
$new_uri(string) β the URI to replace the current request with - ret: no return value
- since:
2.0.00
In case that you want some other request to be served as the top-level request instead of what the client requested directly, call this method from a handler, and then immediately return Apache2::Const::OK. The client will be unaware that a different request was served to her behind the scenes. π
π internal_redirect_handler
Identical to internal_redirect, plus automatically sets $r->content_type is of the sub-request to be the same as of the main request, if $r->handler is true.
$r->internal_redirect_handler($new_uri);
- obj:
$r(Apache2::RequestRec object) β the current request - arg1:
$new_uri(string) β the URI to replace the current request with. - ret: no return value
- since:
2.0.00
This function is designed for things like actions or CGI scripts, when using AddHandler, and you want to preserve the content type across an internal redirect. π―
π lookup_file
Create a subrequest for the given file. This sub request can be inspected to find information about the requested file:
$ret = $r->lookup_file($new_file);
$ret = $r->lookup_file($new_file, $next_filter);
- obj:
$r(Apache2::RequestRec object) β the current request - arg1:
$new_file(string) β the file to lookup - opt arg2:
$next_filter(Apache2::Filter) β see$r->lookup_urifor details. - ret:
$ret(Apache2::SubRequest object) β the sub request record. - since:
2.0.00
See $r->lookup_uri for further discussion. π«Ά
π οΈ lookup_method_uri
Create a sub request for the given URI using a specific method. This sub request can be inspected to find information about the requested URI:
$ret = $r->lookup_method_uri($method, $new_uri);
$ret = $r->lookup_method_uri($method, $new_uri, $next_filter);
- obj:
$r(Apache2::RequestRec object) β the current request - arg1:
$method(string) β the method to use in the new sub request (e.g."GET") - arg2:
$new_uri(string) β the URI to lookup - opt arg3:
$next_filter(Apache2::Filter object) β see$r->lookup_urifor details. - ret:
$ret(Apache2::SubRequest object) β the sub request record. - since:
2.0.00
See $r->lookup_uri for further discussion. π
π lookup_uri
Create a sub request from the given URI. This sub request can be inspected to find information about the requested URI.
$ret = $r->lookup_uri($new_uri);
$ret = $r->lookup_uri($new_uri, $next_filter);
- obj:
$r(Apache2::RequestRec object) β the current request - arg1:
$new_uri(string) β the URI to lookup - opt arg2:
$next_filter(Apache2::Filter object) β the first filter the subrequest should pass the data through. If not specified it defaults to the first connection output filter for the main request$r->proto_output_filters. So if the subrequest sends any output it will be filtered only once. If for example you desire to apply the main request's output filters to the sub-request output as well pass$r->output_filtersas an argument. - ret:
$ret(Apache2::SubRequest object) β the sub request record - since:
2.0.00
Here is an example of a simple subrequest which serves uri /new_uri:
sub handler {
my $r = shift;
my $subr = $r->lookup_uri("/new_uri");
$subr->run;
return Apache2::Const::OK;
}
If let's say you have three request output filters registered to run for the main request:
PerlOutputFilterHandler MyApache2::SubReqExample::filterA
PerlOutputFilterHandler MyApache2::SubReqExample::filterB
PerlOutputFilterHandler MyApache2::SubReqExample::filterC
and you wish to run them all, the code needs to become:
my $subr = $r->lookup_uri("/new_uri", $r->output_filters);
and if you wish to run them all, but the first one (filterA), the code needs to be adjusted to be:
my $subr = $r->lookup_uri("/new_uri", $r->output_filters->next);
βΆοΈ run
Run a sub-request:
$rc = $subr->run();
- obj:
$subr(Apache2::RequestRec object) β the sub-request (e.g. returned bylookup_uri) - ret:
$rc(integer) β the return code of the handler (Apache2::Const::OK,Apache2::Const::DECLINED, etc.) - since:
2.0.00
π§ Unsupported API π§
Apache2::SubRequest also provides auto-generated Perl interface for a few other methods which aren't tested at the moment and therefore their API is a subject to change. These methods will be finalized later as a need arises. If you want to rely on any of the following methods please contact the the mod_perl development mailing list so we can help each other take the steps necessary to shift the method to an officially supported API. π
β‘ internal_fast_redirect
META: Autogenerated - needs to be reviewed/completed
Redirect the current request to a sub_req, merging the pools:
$r->internal_fast_redirect($sub_req);
- obj:
$r(Apache2::RequestRec object) β the current request - arg1:
$sub_req(string) β a subrequest created from this request - ret: no return value
- since:
2.0.00
META: httpd-2.0/modules/http/http_request.c declares this function as:
/* XXX: Is this function is so bogus and fragile that we deep-6 it? */
do we really want to expose it to mod_perl users? π
π lookup_dirent
META: Autogenerated - needs to be reviewed/completed
Create a sub request for the given apr_dir_read result. This sub request can be inspected to find information about the requested file:
$lr = $r->lookup_dirent($finfo);
$lr = $r->lookup_dirent($finfo, $subtype);
$lr = $r->lookup_dirent($finfo, $subtype, $next_filter);
- obj:
$r(Apache2::RequestRec object) β the current request - arg1:
$finfo(APR::Finfo object) β the apr_dir_read result to lookup - arg2:
$subtype(integer) β what type of subrequest to perform, one of;
Apache2::SUBREQ_NO_ARGS ignore r->args and r->path_info
Apache2::SUBREQ_MERGE_ARGS merge r->args and r->path_info
- arg3:
$next_filter(integer) β the first filter the sub_request should use. If this isNULL, it defaults to the first filter for the main request - ret:
$lr(Apache2::RequestRec object) β the new request record - since:
2.0.00
META: where do we take the apr_dir_read result from? π€
π See Also π
mod_perl 2.0 documentation. π
Β©οΈ Copyright Β©οΈ
mod_perl 2.0 and its core modules are copyrighted under The Apache Software License, Version 2.0.
π Authors π
The mod_perl development team and numerous contributors. π
and that's the whole page, bestie π«Ά this gem came from docs::a...Request(3) β built for perl v5.42.3, dated 2023-10-21. πβ¨
π¦ where this page comes from
- nixos 26.05: mod_perl 2.0.13
- nixpkgs unstable: mod_perl 2.0.13
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms