| Apache-DumpHeaders documentation | Contained in the Apache-DumpHeaders distribution. |
Apache::ProxyPassThru - Skeleton for vanilla proxy
#httpd.conf or some such PerlTransHandler Apache::ProxyPassThru PerlSetVar ProxyPassThru_DumpHeaders 1
This module uses libwww-perl as it's web client, feeding the response back into the Apache API request_rec structure. `PerlHandler' will only be invoked if the request is a proxy request, otherwise, your normal server configuration will handle the request.
If used with the Apache::DumpHeaders module it lets you view the headers from another site you are accessing.
This module is configured with PerlSetVar's.
If this is set to a true value we'll set r->notes("DumpHeaders") to "proxypassthru" to get the request logged in the log. This is usually what you want.
Makes it easy to have Apache::DumpHeaders only dump headers from your proxied requests.
The latest version of this module can be found at CPAN and at http://develooper.com/code/Apache::DumpHeaders/. Send questions and suggestions to the modperl mailinglist (see http://perl.apache.org/ for information) or directly to the author (see below).
mod_perl(3), Apache(3), LWP::UserAgent(3)
Ask Bjoern Hansen <ask@develooper.com>.
Originally by Doug MacEachern.
| Apache-DumpHeaders documentation | Contained in the Apache-DumpHeaders distribution. |
package Apache::ProxyPassThru; use strict; use LWP::UserAgent (); use Apache::Constants ':common'; my $VERSION = "0.11"; sub handler { my($r) = @_; return DECLINED unless $r->proxyreq; $r->handler("perl-script"); #ok, let's do it $r->push_handlers(PerlHandler => \&proxy_handler); return OK; } sub proxy_handler { my($r) = @_; my($key,$val); my $request = new HTTP::Request $r->method, $r->uri; my(%headers_in) = $r->headers_in; while(($key,$val) = each %headers_in) { $request->header($key,$val); } if ($r->method eq 'POST') { $request->content(scalar $r->content); } my $res = (new LWP::UserAgent)->simple_request($request); $r->content_type($res->header('Content-type')); #feed reponse back into our request_rec* $r->status($res->code); $r->status_line($res->status_line); my $table = $r->headers_out; $res->scan(sub { $table->add(@_); }); $r->send_http_header(); $r->print($res->content); $r->notes("DumpHeaders", "proxypassthru") if $r->dir_config("ProxyPassThru_DumpHeaders"); return OK; } 1; __END__