+ my $self = shift;
+
+ # handle optional options hashref
+ my $opts;
+ if ( scalar(@_) > 1 and ref( $_[0] ) eq "HASH" ) {
+ $opts = shift;
+ }
+
+ # accept a hashref or a list (keep it ordered)
+ my $post_data;
+ if ( ref( $_[0] ) eq 'HASH' ) {
+ $post_data = shift;
+ }
+ elsif ( scalar(@_) > 1 ) {
+ tie my %hash, 'Tie::IxHash', @_;
+ $post_data = \%hash;
+ }
+ elsif ( scalar(@_) == 1 ) {
+ $post_data = shift;
+ }
+ else {
+ die "https_get called with no params\n";
+ }
+
+ $opts->{"Content-Type"} ||= "application/x-www-form-urlencoded";
+
+ ### XXX referer!!!
+ my %headers;
+ if ( ref( $opts->{headers} ) eq "HASH" ) {
+ %headers = %{ $opts->{headers} };
+ }
+ $headers{'Host'} ||= $self->server;
+
+ my $path = $self->path;
+ if ( keys %$post_data ) {
+ $path .= '?'
+ . join( '&',
+ map { uri_escape($_) . '=' . uri_escape( $post_data->{$_} ) }
+ keys %$post_data );
+ }
+
+ $self->build_subs(qw( response_page response_code response_headers ));
+
+ if ( $ssl_module eq 'Net::SSLeay' ) {
+
+ import Net::SSLeay qw(get_https make_headers);
+ my $headers = make_headers(%headers);
+
+ my( $res_page, $res_code, @res_headers ) =
+ get_https( $self->server,
+ $self->port,
+ $path,
+ $headers,
+ "",
+ $opts->{"Content-Type"},
+ );
+
+ $self->response_page( $res_page );
+ $self->response_code( $res_code );
+ $self->response_headers( { @res_headers } );
+
+ ( $res_page, $res_code, @res_headers );
+
+ } elsif ( $ssl_module eq 'Crypt::SSLeay' ) {
+
+ import HTTP::Request::Common qw(GET);
+
+ my $url = 'https://' . $self->server;
+ $url .= ':' . $self->port
+ unless $self->port == 443;
+ $url .= "/$path";
+
+ my $ua = new LWP::UserAgent;
+ foreach my $hdr ( keys %headers ) {
+ $ua->default_header( $hdr => $headers{$hdr} );
+ }
+ my $res = $ua->request( GET($url) );
+
+ my @res_headers = map { $_ => $res->header($_) }
+ $res->header_field_names;
+
+ $self->response_page( $res->content );
+ $self->response_code( $res->code );
+ $self->response_headers( { @res_headers } );