From 7ce3ec81296de745371f64f8a27edb06c4e17fec Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Fri, 4 Dec 2015 20:53:46 -0800 Subject: [PATCH] Get rid of the LWP codepath, now just a simple wrapper for Business::OnlinePayment --- Changes | 4 + MANIFEST | 2 - lib/Net/HTTPS/Any.pm | 202 ++++++++++----------------------------------------- t/get-cryptssleay.t | 44 ----------- t/post-cryptssleay.t | 46 ------------ 5 files changed, 44 insertions(+), 254 deletions(-) delete mode 100644 t/get-cryptssleay.t delete mode 100644 t/post-cryptssleay.t diff --git a/Changes b/Changes index 4c6bb5b..565186c 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,9 @@ Revision history for Net-HTTPS-Any +0.12 unreleased + - Get rid of the LWP codepath, now just a simple wrapper for + Business::OnlinePayment + 0.11 Sat Jul 26 17:30:43 PDT 2014 - doc: update example in synopsis - Depend on Net::SSLeay and test on it (and not Crypt::SSLeay), to diff --git a/MANIFEST b/MANIFEST index 2fb0be3..e261230 100644 --- a/MANIFEST +++ b/MANIFEST @@ -4,9 +4,7 @@ Makefile.PL README lib/Net/HTTPS/Any.pm t/00-load.t -t/get-cryptssleay.t t/get-netssleay.t t/pod-coverage.t t/pod.t -t/post-cryptssleay.t t/post-netssleay.t diff --git a/lib/Net/HTTPS/Any.pm b/lib/Net/HTTPS/Any.pm index 862d44a..8224494 100644 --- a/lib/Net/HTTPS/Any.pm +++ b/lib/Net/HTTPS/Any.pm @@ -3,51 +3,20 @@ package Net::HTTPS::Any; 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 @@ -76,33 +45,13 @@ our $VERSION = '0.11'; =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. - -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. +This is a wrapper around Net::SSLeay providing a simple interface for the use +of Business::OnlinePayment. -=head1 FUTURE - -Using LWP::Protocol::https 6.02 or later, the LWP path actually uses -Net::SSLeay also instead of Crypt::SSLeay. Going forward that makes this -module more of historical interest, especially so since modern LWP has its own -mechanism to force use of Crypt::SSLeay: - $Net::HTTPS::SSL_SOCKET_CLASS = "Net::SSL"; - -Therefore this module will likely eventually become a wrapper around a single -codepath, driven by the conservative needs of Business::OnlinePayment::HTTPS. +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 @@ -177,53 +126,23 @@ sub https_get { 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); + 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 ) = - get_https( $opts->{'host'}, - $opts->{'port'}, - $path, - $headers, - #"", - #$opts->{"Content-Type"}, - ); + my( $res_page, $res_code, @res_headers ) = + get_https( $opts->{'host'}, + $opts->{'port'}, + $path, + $headers, + #"", + #$opts->{"Content-Type"}, + ); - $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2; + $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2; - return ( $res_page, $res_code, @res_headers ); - - } elsif ( $ssl_module eq 'Crypt::SSLeay' ) { - - 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 ); } @@ -295,69 +214,28 @@ sub https_post { } $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 $headers = make_headers(%headers); - my $raw_data = ref($post_data) ? make_form(%$post_data) : $post_data; + $Net::SSLeay::trace = $opts->{'debug'} + if exists $opts->{'debug'} && $opts->{'debug'}; - $Net::SSLeay::trace = $opts->{'debug'} - if exists $opts->{'debug'} && $opts->{'debug'}; + my $raw_data = ref($post_data) ? make_form(%$post_data) : $post_data; - my( $res_page, $res_code, @res_headers ) = - post_https( $opts->{'host'}, - $opts->{'port'}, - $opts->{'path'}, - $headers, - $raw_data, - $opts->{"Content-Type"}, - ); + $Net::SSLeay::trace = $opts->{'debug'} + if exists $opts->{'debug'} && $opts->{'debug'}; - $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2; + my( $res_page, $res_code, @res_headers ) = + post_https( $opts->{'host'}, + $opts->{'port'}, + $opts->{'path'}, + $headers, + $raw_data, + $opts->{"Content-Type"}, + ); - return ( $res_page, $res_code, @res_headers ); + $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2; - } elsif ( $ssl_module eq 'Crypt::SSLeay' ) { - - 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 ); } @@ -401,7 +279,7 @@ L =head1 COPYRIGHT & LICENSE -Copyright 2008-2014 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 diff --git a/t/get-cryptssleay.t b/t/get-cryptssleay.t deleted file mode 100644 index fa2ef21..0000000 --- a/t/get-cryptssleay.t +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; -use Test::More; - -BEGIN { - - plan skip_all => "LWP tests disabled to avoid excessive dependencies"; - - plan( tests=>4 ); - $Net::HTTPS::Any::skip_NetSSLeay=1; - $Net::HTTPS::Any::skip_NetSSLeay=1; - use_ok 'Net::HTTPS::Any', 'https_get'; -}; - -#200 - -my($content, $response, %headers) = https_get( - { 'host' => 'www.fortify.net', - 'port' => 443, - 'path' => '/sslcheck.html', - }, - 'net_https_any_test' => 1, -); - -#like($response, qr/^HTTP\/[\d\.]+\s+200/i, 'Received 200 (OK) response'); -like($response, qr/^200/i, 'Received 200 (OK) response'); - -ok( length($content), 'Received content' ); - -#404 - -my($content2, $response2, %headers2) = https_get( - { 'host' => 'www.fortify.net', - 'port' => 443, - 'path' => '/notfound.html', - }, - 'net_https_any_test' => 1, -); - -#like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (Not found) response'); -like($response2, qr/^404/i, 'Received 404 (Not found) response'); - diff --git a/t/post-cryptssleay.t b/t/post-cryptssleay.t deleted file mode 100644 index f77fa32..0000000 --- a/t/post-cryptssleay.t +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; -use Test::More; - -BEGIN { - - plan skip_all => "LWP tests disabled to avoid excessive dependencies"; - - plan( tests=>4 ); - $Net::HTTPS::Any::skip_NetSSLeay=1; - $Net::HTTPS::Any::skip_NetSSLeay=1; - use_ok 'Net::HTTPS::Any', 'https_post'; -}; - -#200 - -my($content, $response, %headers) = https_post( - { 'host' => 'www.google.com', - 'port' => 443, - 'path' => '/accounts/ServiceLoginAuth', - 'args' => { 'posted' => 'data' }, - }, - 'net_https_any_test' => 1, -); - -#like($response, qr/^HTTP\/[\d\.]+\s+200/i, 'Received 200 (OK) response'); -like($response, qr/^200/i, 'Received 200 (OK) response'); - -ok( length($content), 'Received content' ); - -#404 - -my($content2, $response2, %headers2) = https_post( - { 'host' => 'www.google.com', - 'port' => 443, - 'path' => '/notfound.html', - 'args' => { 'length' => 'required' }, - }, - 'net_https_any_test' => 1, -); - -#like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (Not FOund) response'); -like($response2, qr/^404/i, 'Received 404 (Not Found) response'); - -- 2.11.0