| CPAN-CachingProxy documentation | view source | Contained in the CPAN-CachingProxy distribution. |
CPAN::CachingProxy - A very simple lightweight CGI based Caching Proxy
use strict;
use CPAN::CachingProxy;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $cache = CPAN::CachingProxy->new(mirrors=>['http://www.perl.com/CPAN/bug']);
$cache->run;
The new function takes quite a few arguments in the usual hash-like manor. Here is an example:
while( my $cgi = new CGI::Fast ) { CGI::Carp->import('fatalsToBrowser');
my $cache =
CPAN::CachingProxy->new(
mirrors => ['http://www.perl.com/CPAN/bug'],
key_space => "MyCache1", # increment to reset cache
cgi => $cgi,
agent => "MyProxy/0.1 (Hurray!!)",
);
$cache->run;
)
The only required argument is mirrors. It must be an arrayref of mirrors.
CCP will choose randomly among them. WARNING: The author has had problems
choosing randomly between several mirrors -- they don't always have the same
files! It is therefore recommended to choose one favorite.
Please do not use the mirror listed in the examples. Pick one near you.
wget -qO - http://www.cpan.org/MIRRORED.BY | grep dst_http | less
CCP will choose a default CGI.pm if you don't specify one. The main reason to choose another is to use FastCGI, something fancier, something of your own devising.
By default, CCP will use Cache::File as the caching mechanism. You may choose
anything you like. There are many other choices. CCP will expect whichever
module you choose to act exactly like Cache::File (including the handle()
method, which you will not find in many of the Cache modules).
If you choose the default cache object (and only if CCP generates it), this option indicates the directory in which you wish to store the cache. By default, it will choose: /tmp/ccp/
You might find odd little problems with this module. If you do, it might be helpful to turn on debugging and view your webserver error log.
This sets the max age of the cache entries. The value is passed to the set()
and handle() calls as the expiry argument. See Cache::Entry for further
information. This value defaults to "2 day".
If the path info matches the {index_regexp} regular expression, instead of using
default_expire, the value index_expire will be used for the expiry
argument to set() and handle().
It makes sense to cache the CPAN indexes for a shorter amount of time.
Therefore, this value defaults to only "3 hour".
A path is considered an index if it matches this regular expression. The default follows.
qr/(?:03modlist\.data|02packages\.details\.txt|01mailrc\.txt)/;
The amount of time to cache the result when an error is encountered. The
default is "15 minutes".
CCP uses the root keyspace "CK" and stores cache entries under the name "CK:$path_info". If you're using your cache for other things and this somehow clashes, you can override the root namespace with this argument.
You can also use this to reset the cache. On most unix-like platforms, the directory with the cache in it will be webserver writable, but not necessarily writable by you. If you increment or change the key_space, it'll have the effect of resetting the cache. The older entries will expire out on their own and so you can forget about them.
The default user agent is LWP::UserAgent. You may choose an alternate if you like. A likely candidate would be LWP::ParanoidAgent. It is technically possible to hijack a proxy of this type to pull locations inside your private networks. It is somewhat unlikely in this module since it prepends your selected mirror to all the URLs it processes. But it's still technically possible.
If you choose to use the default agent and let CCP generate the object, this option will set the user agent string to something other than the default:
CCP/$VERSION (Paul's CPAN caching proxy / perlmonks-id=16186)
If you chose to use the default agent and let CCP generate the oobject, this
option will set the $ua-timeout()> (see LWP::UserAgent for details). It
defaults to 12 seconds and will not set the $ua-timeout()> at all if given an
undefined value.
Paul Miller jettero@cpan.org
I am using this software in my own projects... If you find bugs, please please please let me know.
I normally hang out on #perl on freenode, so you can try to get immediate gratification there if you like. irc://irc.freenode.net/perl
I also check rt.cpan.org from time to time.
Copyright (c) 2008 Paul Miller -- LGPL [Software::License::LGPL_2_1]
perl -MSoftware::License::LGPL_2_1 -e '$l = Software::License::LGPL_2_1->new({holder=>"Paul Miller"});
print $l->fulltext' | less
perl(1), Cache, Cache::File, Cache::Entry, LWP::UserAgent, CGI, CGI::Carp
| CPAN-CachingProxy documentation | view source | Contained in the CPAN-CachingProxy distribution. |