Blame lib/Net/HTTPS.pm

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