use warnings;
use strict;
use base qw( Exporter );
-use vars qw(@EXPORT_OK $ssl_module $skip_NetSSLeay);
+use vars qw( @EXPORT_OK );
use URI::Escape;
use Tie::IxHash;
+use Net::SSLeay 1.30, qw( get_https post_https make_headers make_form );
@EXPORT_OK = qw( https_get https_post );
-BEGIN {
-
- $ssl_module = '';
-
- eval {
- die if defined($skip_NetSSLeay) && $skip_NetSSLeay;
- require Net::SSLeay;
- Net::SSLeay->VERSION(1.30);
-
- #import Net::SSLeay
- # qw(get_https post_https make_form make_headers);
- $ssl_module = 'Net::SSLeay';
- };
-
- if ($@) {
- eval {
- require LWP::UserAgent;
- require HTTP::Request::Common;
- require Crypt::SSLeay;
-
- #import HTTP::Request::Common qw(GET POST);
- $ssl_module = 'Crypt::SSLeay';
- };
- }
-
- unless ($ssl_module) {
- die "One of Net::SSLeay (v1.30 or later)"
- . " or Crypt::SSLeay (+LWP) is required";
- }
-
-}
-
=head1 NAME
-Net::HTTPS::Any - Simple HTTPS client using whichever underlying SSL module is available
+Net::HTTPS::Any - Simple HTTPS client
=cut
-our $VERSION = '0.11';
+our $VERSION = '0.12';
=head1 SYNOPSIS
=head1 DESCRIPTION
-This is a simple wrapper around either of the two available SSL
-modules. It offers a unified API for sending GET and POST requests over HTTPS
-and receiving responses.
-
-It depends on Net::SSLeay _or_ ( Crypt::SSLeay and LWP::UserAgent ).
-
-=head1 WHY THIS MODULE
-
-If you just want to write something that speaks HTTPS, you don't need this
-module. Just go ahead and use whichever of the two modules is good for you.
-Don't worry about it.
+This is a wrapper around Net::SSLeay providing a simple interface for the use
+of Business::OnlinePayment.
-On the other hand, if you are a CPAN author or distribute a Perl application,
-especially if you aim to support multiple OSes/disributions, using this module
-for speaking HTTPS may make things easier on your users. It allows your code
-to be used with either SSL implementation.
+It used to allow switching between Net::SSLeay and Crypt::SSLeay
+implementations, but that was obsoleted. If you need to do that, use LWP
+instead. You can set $Net::HTTPS::SSL_SOCKET_CLASS = "Net::SSL" for
+Crypt::SSLeay instead of the default Net::SSLeay (since 6.02).
=head1 FUNCTIONS
=item args
-CGI arguments, eitehr as a hashref or a listref. In the latter case, ordering
+CGI arguments, either as a hashref or a listref. In the latter case, ordering
is preserved (see L<Tie::IxHash> to do so when passing a hashref).
=item debug
keys %$post_data );
}
- if ( $ssl_module eq 'Net::SSLeay' ) {
-
- no warnings 'uninitialized';
-
- import Net::SSLeay qw(get_https make_headers);
- my $headers = make_headers(%headers);
-
- $Net::SSLeay::trace = $opts->{'debug'}
- if exists $opts->{'debug'} && $opts->{'debug'};
-
- my( $res_page, $res_code, @res_headers ) =
- get_https( $opts->{'host'},
- $opts->{'port'},
- $path,
- $headers,
- #"",
- #$opts->{"Content-Type"},
- );
+ my $headers = make_headers(%headers);
- $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
+ $Net::SSLeay::trace = $opts->{'debug'}
+ if exists $opts->{'debug'} && $opts->{'debug'};
- return ( $res_page, $res_code, @res_headers );
+ my( $res_page, $res_code, @res_headers ) =
+ get_https( $opts->{'host'},
+ $opts->{'port'},
+ $path,
+ $headers,
+ #"",
+ #$opts->{"Content-Type"},
+ );
- } elsif ( $ssl_module eq 'Crypt::SSLeay' ) {
+ $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
- import HTTP::Request::Common qw(GET);
-
- my $url = 'https://' . $opts->{'host'};
- $url .= ':' . $opts->{'port'}
- unless $opts->{'port'} == 443;
- $url .= "/$path";
-
- my $ua = new LWP::UserAgent;
- foreach my $hdr ( keys %headers ) {
- $ua->default_header( $hdr => $headers{$hdr} );
- }
- $ENV{HTTPS_DEBUG} = $opts->{'debug'} if exists $opts->{'debug'};
- my $res = $ua->request( GET($url) );
-
- my @res_headers = map { $_ => $res->header($_) }
- $res->header_field_names;
-
- return ( $res->content, $res->code. ' '. $res->message, @res_headers );
-
- } else {
- die "unknown SSL module $ssl_module";
- }
+ return ( $res_page, $res_code, @res_headers );
}
=item args
-CGI arguments, eitehr as a hashref or a listref. In the latter case, ordering
+CGI arguments, either as a hashref or a listref. In the latter case, ordering
is preserved (see L<Tie::IxHash> to do so when passing a hashref).
=item content
}
$headers{'Host'} ||= $opts->{'host'};
- if ( $ssl_module eq 'Net::SSLeay' ) {
-
- no warnings 'uninitialized';
-
- import Net::SSLeay qw(post_https make_headers make_form);
- my $headers = make_headers(%headers);
-
- $Net::SSLeay::trace = $opts->{'debug'}
- if exists $opts->{'debug'} && $opts->{'debug'};
-
- my $raw_data = ref($post_data) ? make_form(%$post_data) : $post_data;
+ my $headers = make_headers(%headers);
- $Net::SSLeay::trace = $opts->{'debug'}
- if exists $opts->{'debug'} && $opts->{'debug'};
+ $Net::SSLeay::trace = $opts->{'debug'}
+ if exists $opts->{'debug'} && $opts->{'debug'};
- my( $res_page, $res_code, @res_headers ) =
- post_https( $opts->{'host'},
- $opts->{'port'},
- $opts->{'path'},
- $headers,
- $raw_data,
- $opts->{"Content-Type"},
- );
+ my $raw_data = ref($post_data) ? make_form(%$post_data) : $post_data;
- $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
+ $Net::SSLeay::trace = $opts->{'debug'}
+ if exists $opts->{'debug'} && $opts->{'debug'};
- return ( $res_page, $res_code, @res_headers );
+ my( $res_page, $res_code, @res_headers ) =
+ post_https( $opts->{'host'},
+ $opts->{'port'},
+ $opts->{'path'},
+ $headers,
+ $raw_data,
+ $opts->{"Content-Type"},
+ );
- } elsif ( $ssl_module eq 'Crypt::SSLeay' ) {
+ $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
- import HTTP::Request::Common qw(POST);
-
- my $url = 'https://' . $opts->{'host'};
- $url .= ':' . $opts->{'port'}
- unless $opts->{'port'} == 443;
- $url .= $opts->{'path'};
-
- my $ua = new LWP::UserAgent;
- foreach my $hdr ( keys %headers ) {
- $ua->default_header( $hdr => $headers{$hdr} );
- }
-
- $ENV{HTTPS_DEBUG} = $opts->{'debug'} if exists $opts->{'debug'};
-
- my $res;
- if ( ref($post_data) ) {
- $res = $ua->request( POST( $url, [%$post_data] ) );
- }
- else {
- my $req = new HTTP::Request( 'POST' => $url );
- $req->content_type( $opts->{"Content-Type"} );
- $req->content($post_data);
- $res = $ua->request($req);
- }
-
- my @res_headers = map { $_ => $res->header($_) }
- $res->header_field_names;
-
- return ( $res->content, $res->code. ' '. $res->message, @res_headers );
-
- } else {
- die "unknown SSL module $ssl_module";
- }
+ return ( $res_page, $res_code, @res_headers );
}
=head1 COPYRIGHT & LICENSE
-Copyright 2008-2010 Freeside Internet Services, Inc. (http://freeside.biz/)
+Copyright 2008-2016 Freeside Internet Services, Inc. (http://freeside.biz/)
All rights reserved.
This program is free software; you can redistribute it and/or modify it