- Pull in changes from Business::OnlinePayment::HTTPS 0.09 from
authorivan <ivan>
Sat, 1 May 2010 20:05:57 +0000 (20:05 +0000)
committerivan <ivan>
Sat, 1 May 2010 20:05:57 +0000 (20:05 +0000)
  Business::OnlinePayment 3.00
- Default Content-Type to application/x-www-form-urlencoded
- Added WHY THIS MODULE section to POD
- Updated tests for new world of not returning HTTP as part of the
  response code
- Removed meaningless Content-Type handling from https_get
- Added/documented debugging option

Changes
Makefile.PL
lib/Net/HTTPS/Any.pm
t/get-cryptssleay.t
t/get-netssleay.t
t/post-cryptssleay.t
t/post-netssleay.t

diff --git a/Changes b/Changes
index 32caa87..de27f8b 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,17 @@
 Revision history for Net-HTTPS-Any
 
+0.10    unreleased
+        - Pull in changes from Business::OnlinePayment::HTTPS 0.09 from
+          Business::OnlinePayment 3.00
+        - Default Content-Type to application/x-www-form-urlencoded
+        - Added WHY THIS MODULE section to POD
+        - Updated tests for new world of not returning HTTP as part of the
+          response code
+        - Removed meaningless Content-Type handling from https_get
+        - Added/documented debugging option
+
 0.09    unrelesed
-        First version numbered 0.09
-        (based on Business::OnlinePayment::HTTPS 0.08)
+        - First version numbered 0.09 (based on
+          Business::OnlinePayment::HTTPS 0.08 from
+          Business::OnlinePayment 3.00_08)
 
index c6dbbc8..2fe34d0 100644 (file)
@@ -12,6 +12,11 @@ WriteMakefile(
         'Test::More'  => 0,
         'URI::Escape' => 0,
         'Tie::IxHash' => 0,
+        # If you are aware of a way to declare an OR relation in prerequisites,
+        # please tell me, you would be my hero.  it doesn't have to be EU:MM.
+        # 'Net::SSLeay' => 0,
+        # or 'Crypt::SSLeay' => 0,
+        #    'LWP' => 0,
     },
     dist                => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
     clean               => { FILES => 'Net-HTTPS-Any-*' },
index d42b618..e03c5d7 100644 (file)
@@ -2,12 +2,11 @@ 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 $ssl_module $skip_NetSSLeay);
 use URI::Escape;
 use Tie::IxHash;
 
-@ISA = qw( Exporter );
 @EXPORT_OK = qw( https_get https_post );
 
 BEGIN {
@@ -44,15 +43,11 @@ BEGIN {
 
 =head1 NAME
 
-Net::HTTPS::Any - Simple HTTPS class using whatever underlying module is available
-
-=head1 VERSION
-
-Version 0.09
+Net::HTTPS::Any - Simple HTTPS class using whichever underlying SSL module is available
 
 =cut
 
-our $VERSION = '0.09';
+our $VERSION = '0.10';
 
 =head1 SYNOPSIS
 
@@ -82,11 +77,22 @@ 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
+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.
+
 =head1 FUNCTIONS
 
 =head2 https_get HASHREF | FIELD => VALUE, ...
@@ -107,9 +113,11 @@ 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
 
@@ -118,6 +126,8 @@ is preserved (see L<Tie::IxHash> 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 +140,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' ) {
@@ -169,10 +179,12 @@ sub https_get {
                      $opts->{'port'},
                      $path,
                      $headers,
-                     "",
-                     $opts->{"Content-Type"},
+                     #"",
+                     #$opts->{"Content-Type"},
                    );
 
+        $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
+
         return ( $res_page, $res_code, @res_headers );
 
     } elsif ( $ssl_module eq 'Crypt::SSLeay' ) {
@@ -222,7 +234,7 @@ For example: { 'X-Header1' => 'value', ... }
 
 =item Content-Type
 
-For example: 'text/namevalue',
+Defaults to "application/x-www-form-urlencoded" if not specified.
 
 =item args
 
@@ -233,6 +245,9 @@ is preserved (see L<Tie::IxHash> to do so when passing a hashref).
 
 Raw content (overrides args).  A simple scalar containing the raw content.
 
+=item debug
+
+Set true to enable debugging in the underlying SSL module.
 
 =back
 
@@ -272,6 +287,11 @@ sub https_post {
         import Net::SSLeay qw(post_https make_headers make_form);
         my $headers = make_headers(%headers);
 
+        if ($opts->{debug}) {
+            no warnings 'uninitialized';
+            $Net::SSLeay::trace = $opts->{debug};
+        }
+
         my $raw_data = ref($post_data) ? make_form(%$post_data) : $post_data;
 
         $Net::SSLeay::trace = $opts->{'debug'}
@@ -286,6 +306,8 @@ sub https_post {
                       $opts->{"Content-Type"},
                     );
 
+        $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
+
         return ( $res_page, $res_code, @res_headers );
 
     } elsif ( $ssl_module eq 'Crypt::SSLeay' ) {
@@ -342,7 +364,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
@@ -365,13 +386,9 @@ L<http://search.cpan.org/dist/Net-HTTPS-Any>
 
 =back
 
-
-=head1 ACKNOWLEDGEMENTS
-
-
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2008 Freeside Internet Services, Inc. (http://freeside.biz/)
+Copyright 2008-2010 Freeside Internet Services, Inc. (http://freeside.biz/)
 All rights reserved.
 
 This program is free software; you can redistribute it and/or modify it
index 920f50a..43ac5f4 100644 (file)
@@ -21,7 +21,8 @@ my($content, $response, %headers) = https_get(
   'net_https_any_test' => 1,
 );
 
-like($response, qr/^HTTP\/[\d\.]+\s+200/i, 'Received 200 (OK) response');
+#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' );
 
@@ -35,5 +36,6 @@ my($content2, $response2, %headers2) = https_get(
   'net_https_any_test' => 1,
 );
 
-like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (OK) response');
+#like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (Not found) response');
+like($response2, qr/^404/i, 'Received 404 (Not found) response');
 
index d36111d..22a7e23 100644 (file)
@@ -19,7 +19,8 @@ my($content, $response, %headers) = https_get(
   'net_https_any_test' => 1,
 );
 
-like($response, qr/^HTTP\/[\d\.]+\s+200/i, 'Received 200 (OK) response');
+#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' );
 
@@ -33,5 +34,6 @@ my($content2, $response2, %headers2) = https_get(
   'net_https_any_test' => 1,
 );
 
-like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (OK) response');
+#like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (Not Found) response');
+like($response2, qr/^404/i, 'Received 404 (Not Found) response');
 
index 2bf52ff..c9f13ab 100644 (file)
@@ -21,7 +21,8 @@ my($content, $response, %headers) = https_post(
   'net_https_any_test' => 1,
 );
 
-like($response, qr/^HTTP\/[\d\.]+\s+200/i, 'Received 200 (OK) response');
+#like($response, qr/^HTTP\/[\d\.]+\s+200/i, 'Received 200 (Not Found) response');
+like($response, qr/^200/i, 'Received 200 (Not Found) response');
 
 ok( length($content), 'Received content' );
 
@@ -35,5 +36,6 @@ my($content2, $response2, %headers2) = https_post(
   'net_https_any_test' => 1,
 );
 
-like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (OK) response');
+#like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (OK) response');
+like($response2, qr/^404/i, 'Received 404 (OK) response');
 
index 14fc98b..307bdb3 100644 (file)
@@ -19,7 +19,8 @@ my($content, $response, %headers) = https_post(
   'net_https_any_test' => 1,
 );
 
-like($response, qr/^HTTP\/[\d\.]+\s+200/i, 'Received 200 (OK) response');
+#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' );
 
@@ -33,5 +34,6 @@ my($content2, $response2, %headers2) = https_post(
   'net_https_any_test' => 1,
 );
 
-like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (OK) response');
+#like($response2, qr/^HTTP\/[\d\.]+\s+404/i, 'Received 404 (Not Found) response');
+like($response2, qr/^404/i, 'Received 404 (Not Found) response');