X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=lib%2FNet%2FHTTPS%2FAny.pm;h=e3b51dcf155b46ebec02ed194ccdc256f6366a11;hb=b084add798546652fb027bf76d5a69c9b7fa1ff4;hp=d0ef929d786a2f89e26e99aef0fb811c744df75a;hpb=4736a732365ff588d87b1e741ab75f700d72ceb8;p=Net-HTTPS-Any.git diff --git a/lib/Net/HTTPS/Any.pm b/lib/Net/HTTPS/Any.pm index d0ef929..e3b51dc 100644 --- a/lib/Net/HTTPS/Any.pm +++ b/lib/Net/HTTPS/Any.pm @@ -2,57 +2,21 @@ package Net::HTTPS::Any; use warnings; use strict; -use vars qw(@ISA @EXPORT_OK $ssl_module $skip_NetSSLeay); -use Exporter; +use base qw( Exporter ); +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 ); -@ISA = qw( Exporter ); @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 class using whatever underlying module is available - -=head1 VERSION - -Version 0.09 +Net::HTTPS::Any - Simple HTTPS client =cut -our $VERSION = '0.09'; +our $VERSION = '0.13'; =head1 SYNOPSIS @@ -60,9 +24,9 @@ our $VERSION = '0.09'; ( $page, $response, %reply_headers ) = https_get( - { 'host' => 'secure.sisd.com', + { 'host' => 'www.fortify.net', 'port' => 443, - 'path' => '/freeside/index.html', + 'path' => '/sslcheck.html', 'args' => { 'field' => 'value' }, #'args' => [ 'field'=>'value' ], #order preserved }, @@ -70,9 +34,9 @@ our $VERSION = '0.09'; ( $page, $response, %reply_headers ) = https_post( - 'host' => 'secure.sisd.com', + 'host' => 'www.google.com', 'port' => 443, - 'path' => '/freeside/index.html', + 'path' => '/accounts/ServiceLoginAuth', 'args' => { 'field' => 'value' }, #'args' => [ 'field'=>'value' ], #order preserved ); @@ -81,11 +45,13 @@ our $VERSION = '0.09'; =head1 DESCRIPTION -This is a simple wrapper around either of the two available SSL -modules. It offers a unified API for send GET and POST requests over HTTPS -and receiving responses. +This is a wrapper around Net::SSLeay providing a simple interface for the use +of Business::OnlinePayment. -It depends on Net::SSLeay _or_ ( Crypt::SSLeay and LWP::UserAgent ). +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 @@ -107,17 +73,21 @@ Parameters are: For example: { 'X-Header1' => 'value', ... } -=item Content-Type +=cut -For example: 'text/namevalue', +# =item Content-Type +# +# Defaults to "application/x-www-form-urlencoded" if not specified. =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 to do so when passing a hashref). =item debug +Set true to enable debugging. + =back Returns a list consisting of the page content as a string, the HTTP @@ -130,7 +100,7 @@ sub https_get { my $opts = ref($_[0]) ? shift : { @_ }; #hashref or list # accept a hashref or a list (keep it ordered) - my $post_data = {}; + my $post_data = {}; # technically get_data, pedant if ( exists($opts->{'args'}) && ref($opts->{'args'}) eq 'HASH' ) { $post_data = $opts->{'args'}; } elsif ( exists($opts->{'args'}) && ref($opts->{'args'}) eq 'ARRAY' ) { @@ -156,48 +126,25 @@ sub https_get { keys %$post_data ); } - if ( $ssl_module eq 'Net::SSLeay' ) { - - import Net::SSLeay qw(get_https make_headers); - my $headers = make_headers(%headers); - - $Net::SSLeay::trace = $opts->{'debug'} if exists $opts->{'debug'}; + my $headers = make_headers(%headers); - my( $res_page, $res_code, @res_headers ) = - get_https( $opts->{'host'}, - $opts->{'port'}, - $path, - $headers, - "", - $opts->{"Content-Type"}, - ); + $Net::SSLeay::trace = $opts->{'debug'} + if exists $opts->{'debug'} && $opts->{'debug'}; - return ( $res_page, $res_code, @res_headers ); + no warnings 'uninitialized'; - } elsif ( $ssl_module eq 'Crypt::SSLeay' ) { + my( $res_page, $res_code, @res_headers ) = + get_https( $opts->{'host'}, + $opts->{'port'}, + $path, + $headers, + #"", + #$opts->{"Content-Type"}, + ); - import HTTP::Request::Common qw(GET); + $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2; - 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 ); } @@ -221,17 +168,20 @@ For example: { 'X-Header1' => 'value', ... } =item Content-Type -For example: 'text/namevalue', +Defaults to "application/x-www-form-urlencoded" if not specified. =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 to do so when passing a hashref). =item content Raw content (overrides args). A simple scalar containing the raw content. +=item debug + +Set true to enable debugging in the underlying SSL module. =back @@ -266,61 +216,30 @@ sub https_post { } $headers{'Host'} ||= $opts->{'host'}; - if ( $ssl_module eq 'Net::SSLeay' ) { - - import Net::SSLeay qw(post_https make_headers make_form); - 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'}; + my $headers = make_headers(%headers); - 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'}; - return ( $res_page, $res_code, @res_headers ); + my $raw_data = ref($post_data) ? make_form(%$post_data) : $post_data; - } elsif ( $ssl_module eq 'Crypt::SSLeay' ) { + $Net::SSLeay::trace = $opts->{'debug'} + if exists $opts->{'debug'} && $opts->{'debug'}; - import HTTP::Request::Common qw(POST); + no warnings 'uninitialized'; - my $url = 'https://' . $opts->{'host'}; - $url .= ':' . $opts->{'port'} - unless $opts->{'port'} == 443; - $url .= $opts->{'path'}; + my( $res_page, $res_code, @res_headers ) = + post_https( $opts->{'host'}, + $opts->{'port'}, + $opts->{'path'}, + $headers, + $raw_data, + $opts->{"Content-Type"}, + ); - my $ua = new LWP::UserAgent; - foreach my $hdr ( keys %headers ) { - $ua->default_header( $hdr => $headers{$hdr} ); - } + $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2; - $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 ); } @@ -340,7 +259,6 @@ You can find documentation for this module with the perldoc command. perldoc Net::HTTPS::Any - You can also look for information at: =over 4 @@ -363,13 +281,9 @@ L =back - -=head1 ACKNOWLEDGEMENTS - - =head1 COPYRIGHT & LICENSE -Copyright 2008 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