|
Packit |
03f954 |
package Net::HTTPS;
|
|
Packit |
03f954 |
$Net::HTTPS::VERSION = '6.17';
|
|
Packit |
03f954 |
use strict;
|
|
Packit |
03f954 |
use warnings;
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
# Figure out which SSL implementation to use
|
|
Packit |
03f954 |
use vars qw($SSL_SOCKET_CLASS);
|
|
Packit |
03f954 |
if ($SSL_SOCKET_CLASS) {
|
|
Packit |
03f954 |
# somebody already set it
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
elsif ($SSL_SOCKET_CLASS = $ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS}) {
|
|
Packit |
03f954 |
unless ($SSL_SOCKET_CLASS =~ /^(IO::Socket::SSL|Net::SSL)\z/) {
|
|
Packit |
03f954 |
die "Bad socket class [$SSL_SOCKET_CLASS]";
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
eval "require $SSL_SOCKET_CLASS";
|
|
Packit |
03f954 |
die $@ if $@;
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
elsif ($IO::Socket::SSL::VERSION) {
|
|
Packit |
03f954 |
$SSL_SOCKET_CLASS = "IO::Socket::SSL"; # it was already loaded
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
elsif ($Net::SSL::VERSION) {
|
|
Packit |
03f954 |
$SSL_SOCKET_CLASS = "Net::SSL";
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
else {
|
|
Packit |
03f954 |
eval { require IO::Socket::SSL; };
|
|
Packit |
03f954 |
if ($@) {
|
|
Packit |
03f954 |
my $old_errsv = $@;
|
|
Packit |
03f954 |
eval {
|
|
Packit |
03f954 |
require Net::SSL; # from Crypt-SSLeay
|
|
Packit |
03f954 |
};
|
|
Packit |
03f954 |
if ($@) {
|
|
Packit |
03f954 |
$old_errsv =~ s/\s\(\@INC contains:.*\)/)/g;
|
|
Packit |
03f954 |
die $old_errsv . $@;
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
$SSL_SOCKET_CLASS = "Net::SSL";
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
else {
|
|
Packit |
03f954 |
$SSL_SOCKET_CLASS = "IO::Socket::SSL";
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
require Net::HTTP::Methods;
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
our @ISA=($SSL_SOCKET_CLASS, 'Net::HTTP::Methods');
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
sub configure {
|
|
Packit |
03f954 |
my($self, $cnf) = @_;
|
|
Packit |
03f954 |
$self->http_configure($cnf);
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
sub http_connect {
|
|
Packit |
03f954 |
my($self, $cnf) = @_;
|
|
Packit |
03f954 |
if ($self->isa("Net::SSL")) {
|
|
Packit |
03f954 |
if ($cnf->{SSL_verify_mode}) {
|
|
Packit |
03f954 |
if (my $f = $cnf->{SSL_ca_file}) {
|
|
Packit |
03f954 |
$ENV{HTTPS_CA_FILE} = $f;
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
if (my $f = $cnf->{SSL_ca_path}) {
|
|
Packit |
03f954 |
$ENV{HTTPS_CA_DIR} = $f;
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
if ($cnf->{SSL_verifycn_scheme}) {
|
|
Packit |
03f954 |
$@ = "Net::SSL from Crypt-SSLeay can't verify hostnames; either install IO::Socket::SSL or turn off verification by setting the PERL_LWP_SSL_VERIFY_HOSTNAME environment variable to 0";
|
|
Packit |
03f954 |
return undef;
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
$self->SUPER::configure($cnf);
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
sub http_default_port {
|
|
Packit |
03f954 |
443;
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
if ($SSL_SOCKET_CLASS eq "Net::SSL") {
|
|
Packit |
03f954 |
# The underlying SSLeay classes fails to work if the socket is
|
|
Packit |
03f954 |
# placed in non-blocking mode. This override of the blocking
|
|
Packit |
03f954 |
# method makes sure it stays the way it was created.
|
|
Packit |
03f954 |
*blocking = sub { };
|
|
Packit |
03f954 |
}
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
1;
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=pod
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=encoding UTF-8
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=head1 NAME
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
Net::HTTPS - Low-level HTTP over SSL/TLS connection (client)
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=head1 VERSION
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
version 6.17
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=head1 DESCRIPTION
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
The C<Net::HTTPS> is a low-level HTTP over SSL/TLS client. The interface is the same
|
|
Packit |
03f954 |
as the interface for C<Net::HTTP>, but the constructor takes additional parameters
|
|
Packit |
03f954 |
as accepted by L<IO::Socket::SSL>. The C<Net::HTTPS> object is an C<IO::Socket::SSL>
|
|
Packit |
03f954 |
too, which makes it inherit additional methods from that base class.
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
For historical reasons this module also supports using C<Net::SSL> (from the
|
|
Packit |
03f954 |
Crypt-SSLeay distribution) as its SSL driver and base class. This base is
|
|
Packit |
03f954 |
automatically selected if available and C<IO::Socket::SSL> isn't. You might
|
|
Packit |
03f954 |
also force which implementation to use by setting $Net::HTTPS::SSL_SOCKET_CLASS
|
|
Packit |
03f954 |
before loading this module. If not set this variable is initialized from the
|
|
Packit |
03f954 |
C<PERL_NET_HTTPS_SSL_SOCKET_CLASS> environment variable.
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=head1 ENVIRONMENT
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
You might set the C<PERL_NET_HTTPS_SSL_SOCKET_CLASS> environment variable to the name
|
|
Packit |
03f954 |
of the base SSL implementation (and Net::HTTPS base class) to use. The default
|
|
Packit |
03f954 |
is C<IO::Socket::SSL>. Currently the only other supported value is C<Net::SSL>.
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=head1 SEE ALSO
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
L<Net::HTTP>, L<IO::Socket::SSL>
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=head1 AUTHOR
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
Gisle Aas <gisle@activestate.com>
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=head1 COPYRIGHT AND LICENSE
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
This software is copyright (c) 2001-2017 by Gisle Aas.
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
This is free software; you can redistribute it and/or modify it under
|
|
Packit |
03f954 |
the same terms as the Perl 5 programming language system itself.
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
=cut
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
__END__
|
|
Packit |
03f954 |
|
|
Packit |
03f954 |
#ABSTRACT: Low-level HTTP over SSL/TLS connection (client)
|
|
Packit |
03f954 |
|