| Plagger documentation | Contained in the Plagger distribution. |
Plagger::Cookies - cookie_jar factory class
# config.yaml: Firefox's cookies.txt
global:
user_agent:
cookies: /path/to/cookies.txt
# or more verbosely
global:
user_agent:
cookies:
type: Safari
file: /path/to/Cookies.plist
autosave: 1
Plagger::Cookies is a factory class to create HTTP::Cookies subclass instances by detecting the proper subclass using its filename (and possibly magic, if the filename format is share amongst multiple subclasses, eventually).
Thanks to brian d foy and Gisle Aas for creating HTTP::Cookies::* subclass modules.
Tatsuhiko Miyagawa
| Plagger documentation | Contained in the Plagger distribution. |
package Plagger::Cookies; use strict; use UNIVERSAL::require; use Storable; our %Instances; sub create { my($class, $conf) = @_; unless (ref $conf && $conf->{type}) { my $file = ref $conf ? $conf->{file} : $conf; $conf = $class->auto_guess($file); } $Instances{$conf->{file}} ||= do { $conf = Storable::dclone($conf); my $type = delete $conf->{type}; my $impl = $type ? "HTTP::Cookies::$type" : "HTTP::Cookies"; Plagger->context->log(debug => "$conf->{file} => $impl"); $impl->require or Plagger->context->error("Error loading $impl: $@"); if ($conf->{file} && !-e $conf->{file}) { Plagger->context->log(warn => "$conf->{file}: $!"); } $impl->new(%$conf); }; } sub auto_guess { my($self, $filename) = @_; # autosave is off by default for foreign cookies files if ($filename =~ /cookies\.txt$/i) { return { type => 'Mozilla', file => $filename }; } elsif ($filename =~ /index\.dat$/i) { return { type => 'Microsoft', file => $filename }; } elsif ($filename =~ /Cookies\.plist$/i) { return { type => 'Safari', file => $filename }; } elsif ($filename =~ m!\.w3m/cookie$!) { return { type => 'w3m', file => $filename }; } Plagger->context->log(warn => "Don't know type of $filename. Use it as LWP default"); return { file => $filename, autosave => 1 }; } 1; __END__