Alien-ROOT
view release on metacpan or search on metacpan
inc/inc_File-Fetch/File/Fetch.pm view on Meta::CPAN
};
for my $method ( keys %$Tmpl ) {
no strict 'refs';
*$method = sub {
my $self = shift;
$self->{$method} = $_[0] if @_;
return $self->{$method};
}
}
sub _create {
my $class = shift;
my %hash = @_;
my $args = check( $Tmpl, \%hash ) or return;
bless $args, $class;
if( lc($args->scheme) ne 'file' and not $args->host ) {
return $class->_error(loc(
"Hostname required when fetching from '%1'",$args->scheme));
}
for (qw[path]) {
unless( $args->$_() ) { # 5.5.x needs the ()
return $class->_error(loc("No '%1' specified",$_));
}
}
return $args;
}
}
=item $ff->output_file
The name of the output file. This is the same as $ff->file,
but any query parameters are stripped off. For example:
http://example.com/index.html?x=y
would make the output file be C<index.html> rather than
C<index.html?x=y>.
=back
=cut
sub output_file {
my $self = shift;
my $file = $self->file;
$file =~ s/\?.*$//g;
$file ||= $self->file_default;
return $file;
}
### XXX do this or just point to URI::Escape?
# =head2 $esc_uri = $ff->escaped_uri
#
# =cut
#
# ### most of this is stolen straight from URI::escape
# { ### Build a char->hex map
# my %escapes = map { chr($_) => sprintf("%%%02X", $_) } 0..255;
#
# sub escaped_uri {
# my $self = shift;
# my $uri = $self->uri;
#
# ### Default unsafe characters. RFC 2732 ^(uric - reserved)
# $uri =~ s/([^A-Za-z0-9\-_.!~*'()])/
# $escapes{$1} || $self->_fail_hi($1)/ge;
#
# return $uri;
# }
#
# sub _fail_hi {
# my $self = shift;
# my $char = shift;
#
# $self->_error(loc(
# "Can't escape '%1', try using the '%2' module instead",
# sprintf("\\x{%04X}", ord($char)), 'URI::Escape'
# ));
# }
#
# sub output_file {
#
# }
#
#
# }
=head1 METHODS
=head2 $ff = File::Fetch->new( uri => 'http://some.where.com/dir/file.txt' );
Parses the uri and creates a corresponding File::Fetch::Item object,
that is ready to be C<fetch>ed and returns it.
Returns false on failure.
=cut
sub new {
my $class = shift;
my %hash = @_;
my ($uri, $file_default);
my $tmpl = {
uri => { required => 1, store => \$uri },
file_default => { required => 0, store => \$file_default },
};
check( $tmpl, \%hash ) or return;
### parse the uri to usable parts ###
my $href = $class->_parse_uri( $uri ) or return;
$href->{file_default} = $file_default if $file_default;
### make it into a FFI object ###
my $ff = $class->_create( %$href ) or return;
### return the object ###
return $ff;
}
### parses an uri to a hash structure:
###
### $class->_parse_uri( 'ftp://ftp.cpan.org/pub/mirror/index.txt' )
###
### becomes:
###
### $href = {
### scheme => 'ftp',
### host => 'ftp.cpan.org',
### path => '/pub/mirror',
### file => 'index.html'
### };
###
inc/inc_File-Fetch/File/Fetch.pm view on Meta::CPAN
This is a hashref registering what modules/utilities were known to fail
for fetching files (mostly because they weren't installed).
You can reset this cache by assigning an empty hashref to it, or
individually remove keys.
See the note on C<MAPPING> below.
=head1 MAPPING
Here's a quick mapping for the utilities/modules, and their names for
the $BLACKLIST, $METHOD_FAIL and other internal functions.
LWP => lwp
HTTP::Lite => httplite
HTTP::Tiny => httptiny
Net::FTP => netftp
wget => wget
lynx => lynx
ncftp => ncftp
ftp => ftp
curl => curl
rsync => rsync
lftp => lftp
fetch => fetch
IO::Socket => iosock
=head1 FREQUENTLY ASKED QUESTIONS
=head2 So how do I use a proxy with File::Fetch?
C<File::Fetch> currently only supports proxies with LWP::UserAgent.
You will need to set your environment variables accordingly. For
example, to use an ftp proxy:
$ENV{ftp_proxy} = 'foo.com';
Refer to the LWP::UserAgent manpage for more details.
=head2 I used 'lynx' to fetch a file, but its contents is all wrong!
C<lynx> can only fetch remote files by dumping its contents to C<STDOUT>,
which we in turn capture. If that content is a 'custom' error file
(like, say, a C<404 handler>), you will get that contents instead.
Sadly, C<lynx> doesn't support any options to return a different exit
code on non-C<200 OK> status, giving us no way to tell the difference
between a 'successful' fetch and a custom error page.
Therefor, we recommend to only use C<lynx> as a last resort. This is
why it is at the back of our list of methods to try as well.
=head2 Files I'm trying to fetch have reserved characters or non-ASCII characters in them. What do I do?
C<File::Fetch> is relatively smart about things. When trying to write
a file to disk, it removes the C<query parameters> (see the
C<output_file> method for details) from the file name before creating
it. In most cases this suffices.
If you have any other characters you need to escape, please install
the C<URI::Escape> module from CPAN, and pre-encode your URI before
passing it to C<File::Fetch>. You can read about the details of URIs
and URI encoding here:
http://www.faqs.org/rfcs/rfc2396.html
=head1 TODO
=over 4
=item Implement $PREFER_BIN
To indicate to rather use commandline tools than modules
=back
=head1 BUG REPORTS
Please report bugs or other issues to E<lt>bug-file-fetch@rt.cpan.org<gt>.
=head1 AUTHOR
This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
=head1 COPYRIGHT
This library is free software; you may redistribute and/or modify it
under the same terms as Perl itself.
=cut
# Local variables:
# c-indentation-style: bsd
# c-basic-offset: 4
# indent-tabs-mode: nil
# End:
# vim: expandtab shiftwidth=4:
( run in 0.446 second using v1.01-cache-2.11-cpan-62a16548d74 )