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)
'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-*' },
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 {
=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
=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, ...
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
=item debug
+Set true to enable debugging.
+
=back
Returns a list consisting of the page content as a string, the HTTP
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' ) {
$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' ) {
=item Content-Type
-For example: 'text/namevalue',
+Defaults to "application/x-www-form-urlencoded" if not specified.
=item args
Raw content (overrides args). A simple scalar containing the raw content.
+=item debug
+
+Set true to enable debugging in the underlying SSL module.
=back
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'}
$opts->{"Content-Type"},
);
+ $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2;
+
return ( $res_page, $res_code, @res_headers );
} elsif ( $ssl_module eq 'Crypt::SSLeay' ) {
perldoc Net::HTTPS::Any
-
You can also look for information at:
=over 4
=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
'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' );
'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');
'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' );
'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');
'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' );
'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');
'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' );
'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');