Net-HTTPS-Any-0.12/0000755000175000017500000000000012750437671012277 5ustar ivanivanNet-HTTPS-Any-0.12/META.yml0000644000175000017500000000115712750437671013554 0ustar ivanivan--- abstract: 'Simple HTTPS client' author: - 'Ivan Kohler ' build_requires: ExtUtils::MakeMaker: '0' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 1 generated_by: 'ExtUtils::MakeMaker version 7.0401, CPAN::Meta::Converter version 2.150005' license: unknown meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: Net-HTTPS-Any no_index: directory: - t - inc requires: Net::SSLeay: '0' Test::More: '0' Tie::IxHash: '0' URI::Escape: '0' version: '0.12' x_serialization_backend: 'CPAN::Meta::YAML version 0.012' Net-HTTPS-Any-0.12/MANIFEST0000644000175000017500000000045312750437671013432 0ustar ivanivanChanges MANIFEST Makefile.PL README lib/Net/HTTPS/Any.pm t/00-load.t t/get-netssleay.t t/pod-coverage.t t/pod.t t/post-netssleay.t META.yml Module YAML meta-data (added by MakeMaker) META.json Module JSON meta-data (added by MakeMaker) Net-HTTPS-Any-0.12/META.json0000644000175000017500000000202212750437671013714 0ustar ivanivan{ "abstract" : "Simple HTTPS client", "author" : [ "Ivan Kohler " ], "dynamic_config" : 1, "generated_by" : "ExtUtils::MakeMaker version 7.0401, CPAN::Meta::Converter version 2.150005", "license" : [ "unknown" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "Net-HTTPS-Any", "no_index" : { "directory" : [ "t", "inc" ] }, "prereqs" : { "build" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "configure" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "runtime" : { "requires" : { "Net::SSLeay" : "0", "Test::More" : "0", "Tie::IxHash" : "0", "URI::Escape" : "0" } } }, "release_status" : "stable", "version" : "0.12", "x_serialization_backend" : "JSON::PP version 2.27300" } Net-HTTPS-Any-0.12/lib/0000755000175000017500000000000012750437671013045 5ustar ivanivanNet-HTTPS-Any-0.12/lib/Net/0000755000175000017500000000000012750437671013573 5ustar ivanivanNet-HTTPS-Any-0.12/lib/Net/HTTPS/0000755000175000017500000000000012750437671014475 5ustar ivanivanNet-HTTPS-Any-0.12/lib/Net/HTTPS/Any.pm0000644000175000017500000001621112630466440015554 0ustar ivanivanpackage Net::HTTPS::Any; use warnings; use strict; 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 ); @EXPORT_OK = qw( https_get https_post ); =head1 NAME Net::HTTPS::Any - Simple HTTPS client =cut our $VERSION = '0.12'; =head1 SYNOPSIS use Net::HTTPS::Any qw(https_get https_post); ( $page, $response, %reply_headers ) = https_get( { 'host' => 'www.fortify.net', 'port' => 443, 'path' => '/sslcheck.html', 'args' => { 'field' => 'value' }, #'args' => [ 'field'=>'value' ], #order preserved }, ); ( $page, $response, %reply_headers ) = https_post( 'host' => 'www.google.com', 'port' => 443, 'path' => '/accounts/ServiceLoginAuth', 'args' => { 'field' => 'value' }, #'args' => [ 'field'=>'value' ], #order preserved ); #... =head1 DESCRIPTION This is a wrapper around Net::SSLeay providing a simple interface for the use of Business::OnlinePayment. 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 =head2 https_get HASHREF | FIELD => VALUE, ... Accepts parameters as either a hashref or a list of fields and values. Parameters are: =over 4 =item host =item port =item path =item headers (hashref) For example: { 'X-Header1' => 'value', ... } =cut # =item Content-Type # # Defaults to "application/x-www-form-urlencoded" if not specified. =item args 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 response code and message (i.e. "200 OK" or "404 Not Found"), and a list of key/value pairs representing the HTTP response headers. =cut sub https_get { my $opts = ref($_[0]) ? shift : { @_ }; #hashref or list # accept a hashref or a list (keep it ordered) 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' ) { tie my %hash, 'Tie::IxHash', @{ $opts->{'args'} }; $post_data = \%hash; } $opts->{'port'} ||= 443; #$opts->{"Content-Type"} ||= "application/x-www-form-urlencoded"; ### XXX referer!!! my %headers = (); if ( ref( $opts->{headers} ) eq "HASH" ) { %headers = %{ $opts->{headers} }; } $headers{'Host'} ||= $opts->{'host'}; my $path = $opts->{'path'}; if ( keys %$post_data ) { $path .= '?' . join( ';', map { uri_escape($_) . '=' . uri_escape( $post_data->{$_} ) } keys %$post_data ); } 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"}, ); $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2; return ( $res_page, $res_code, @res_headers ); } =head2 https_post HASHREF | FIELD => VALUE, ... Accepts parameters as either a hashref or a list of fields and values. Parameters are: =over 4 =item host =item port =item path =item headers (hashref) For example: { 'X-Header1' => 'value', ... } =item Content-Type Defaults to "application/x-www-form-urlencoded" if not specified. =item args 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 Returns a list consisting of the page content as a string, the HTTP response code and message (i.e. "200 OK" or "404 Not Found"), and a list of key/value pairs representing the HTTP response headers. =cut sub https_post { my $opts = ref($_[0]) ? shift : { @_ }; #hashref or list # accept a hashref or a list (keep it ordered). or a scalar of content. my $post_data = ''; if ( exists($opts->{'args'}) && ref($opts->{'args'}) eq 'HASH' ) { $post_data = $opts->{'args'}; } elsif ( exists($opts->{'args'}) && ref($opts->{'args'}) eq 'ARRAY' ) { tie my %hash, 'Tie::IxHash', @{ $opts->{'args'} }; $post_data = \%hash; } if ( exists $opts->{'content'} ) { $post_data = $opts->{'content'}; } $opts->{'port'} ||= 443; $opts->{"Content-Type"} ||= "application/x-www-form-urlencoded"; ### XXX referer!!! my %headers; if ( ref( $opts->{headers} ) eq "HASH" ) { %headers = %{ $opts->{headers} }; } $headers{'Host'} ||= $opts->{'host'}; 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; $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"}, ); $res_code =~ /^(HTTP\S+ )?(.*)/ and $res_code = $2; return ( $res_page, $res_code, @res_headers ); } =head1 AUTHOR Ivan Kohler, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc Net::HTTPS::Any You can also look for information at: =over 4 =item * RT: CPAN's request tracker L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Search CPAN L =back =head1 COPYRIGHT & LICENSE 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 under the same terms as Perl itself. =cut 1; Net-HTTPS-Any-0.12/Makefile.PL0000644000175000017500000000203212334245317014236 0ustar ivanivanuse strict; use warnings; use ExtUtils::MakeMaker; WriteMakefile( NAME => 'Net::HTTPS::Any', AUTHOR => 'Ivan Kohler ', VERSION_FROM => 'lib/Net/HTTPS/Any.pm', ABSTRACT_FROM => 'lib/Net/HTTPS/Any.pm', PL_FILES => {}, PREREQ_PM => { '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, #failing tests is worse, Net::SSLeay appears to finally have emerged # as best-practice with the release of LWP::Protocol::https that uses # IO::Socket::SSL and therefore Net::SSLeay 'Net::SSLeay' => 0, }, dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, clean => { FILES => 'Net-HTTPS-Any-*' }, ); Net-HTTPS-Any-0.12/t/0000755000175000017500000000000012750437671012542 5ustar ivanivanNet-HTTPS-Any-0.12/t/get-netssleay.t0000644000175000017500000000146312264413332015503 0ustar ivanivan#!/usr/bin/perl use strict; use warnings; use Test::More; BEGIN { plan( tests=>4 ); use_ok( 'Net::HTTPS::Any', qw( 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'); Net-HTTPS-Any-0.12/t/00-load.t0000644000175000017500000000023312264413332014045 0ustar ivanivan#!perl -T use Test::More tests => 1; BEGIN { use_ok( 'Net::HTTPS::Any' ); } diag( "Testing Net::HTTPS::Any $Net::HTTPS::Any::VERSION, Perl $], $^X" ); Net-HTTPS-Any-0.12/t/post-netssleay.t0000644000175000017500000000160312750437151015712 0ustar ivanivan#!/usr/bin/perl use strict; use warnings; use Test::More; BEGIN { plan( tests=>4 ); use_ok 'Net::HTTPS::Any', 'https_post'; }; #200 my($content, $response, %headers) = https_post( { 'host' => 'accounts.google.com', 'port' => 443, 'path' => '/ServiceLogin', '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'); Net-HTTPS-Any-0.12/t/pod.t0000644000175000017500000000035012264413332013473 0ustar ivanivan#!perl -T use strict; use warnings; use Test::More; # Ensure a recent version of Test::Pod my $min_tp = 1.22; eval "use Test::Pod $min_tp"; plan skip_all => "Test::Pod $min_tp required for testing POD" if $@; all_pod_files_ok(); Net-HTTPS-Any-0.12/t/pod-coverage.t0000644000175000017500000000104712264413332015270 0ustar ivanivanuse strict; use warnings; use Test::More; # Ensure a recent version of Test::Pod::Coverage my $min_tpc = 1.08; eval "use Test::Pod::Coverage $min_tpc"; plan skip_all => "Test::Pod::Coverage $min_tpc required for testing POD coverage" if $@; # Test::Pod::Coverage doesn't require a minimum Pod::Coverage version, # but older versions don't recognize some common documentation styles my $min_pc = 0.18; eval "use Pod::Coverage $min_pc"; plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage" if $@; all_pod_coverage_ok(); Net-HTTPS-Any-0.12/README0000644000175000017500000000203712264413332013145 0ustar ivanivanNet-HTTPS-Any This module will make an HTTPS connection using Net::SSLeay or ( Crypt::SSLeay and LWP), whatever is available on the current system. It is derived from Business::OnlinePayment::HTTPS. INSTALLATION To install this module, run the following commands: perl Makefile.PL make make test make install SUPPORT AND DOCUMENTATION After installing, you can find documentation for this module with the perldoc command. perldoc Net::HTTPS::Any You can also look for information at: RT, CPAN's request tracker http://rt.cpan.org/NoAuth/Bugs.html?Dist=Net-HTTPS-Any AnnoCPAN, Annotated CPAN documentation http://annocpan.org/dist/Net-HTTPS-Any CPAN Ratings http://cpanratings.perl.org/d/Net-HTTPS-Any Search CPAN http://search.cpan.org/dist/Net-HTTPS-Any COPYRIGHT AND LICENCE Copyright (C) 2008 Freeside Internet Services, Inc. (http://freeside.biz) All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Net-HTTPS-Any-0.12/Changes0000644000175000017500000000261412750437607013574 0ustar ivanivanRevision history for Net-HTTPS-Any 0.12 Wed Aug 3 12:01:08 PDT 2016 - Get rid of the LWP codepath, now just a simple wrapper for Business::OnlinePayment - fix test failures (closes: CPAN#116405) 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 eliminate spurious test failures and increase installability. Alas, but the last four years have not provided OR relationships in CPAN dependencies (closes: CPAN#73363) - doc: spelling (closes: CPAN#88510) - test: fix 404 test 0.10 Sat May 1 13:39:39 PDT 2010 - 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 - Updated servers used for testing in examples and tests - Supress uninitialized value warnings from Net::SSLeay 0.09 unrelesed - First version numbered 0.09 (based on Business::OnlinePayment::HTTPS 0.08 from Business::OnlinePayment 3.00_08)