use Test::More skip_all => "Can't make this work with Crypt::SSLeay";
use strict;
use t::Utils;
use HTTP::Proxy;
use LWP::UserAgent;
# test CONNECT
my $test = Test::Builder->new;
# this is to work around tests in forked processes
$test->use_numbers(0);
$test->no_ending(1);
SKIP: {
eval "require Crypt::SSLeay;"
skip "Crypt::SSLeay not installed", 1 if $@;
my $proxy = HTTP::Proxy->new( port => 0, maxconn => 1, logmask => 63 );
# Excerpts from the Crypt::SSLeay documentation
# ---------------------------------------------
# LWP::UserAgent and Crypt::SSLeay have their own versions of proxy support.
#
# At the time of this writing, libwww v5.6 seems to proxy https requests
# fine with an Apache mod_proxy server. It sends a line like:
#
# GET https://www.nodeworks.com HTTP/1.1
#
# to the proxy server, which is not the CONNECT request that some
# proxies would expect, so this may not work with other proxy servers
# than mod_proxy. The CONNECT method is used by Crypt::SSLeay's internal
# proxy support.
#
# For native Crypt::SSLeay proxy support of https requests, you need to
# set an environment variable HTTPS_PROXY to your proxy server & port, as in:
#
# # PROXY SUPPORT
# $ENV{HTTPS_PROXY} = 'http://proxy_hostname_or_ip:port';
# $ENV{HTTPS_PROXY} = '127.0.0.1:8080';
#
# Use of the HTTPS_PROXY environment variable in this way is similar to
# LWP::UserAgent->env_proxy() usage, but calling that method will likely
# override or break the Crypt::SSLeay support, so do not mix the two.
#$proxy->agent( LWP::UserAgent->new ); # no env_proxy
$proxy->init; # required to access the url later
# fork a HTTP proxy
my $pid = fork_proxy(
$proxy,
sub {
ok( $proxy->conn == 1,
"Served the correct number of requests" );
}
);
# run a client
my $ua = LWP::UserAgent->new; # no env_proxy
$ENV{HTTPS_PROXY} = $proxy->url; # to be used by Crypt::SSLeay
#$ENV{HTTPS_DEBUG} = 1;
my $req = HTTP::Request->new( GET => "https://www.gandi.net/");
my $res = $ua->request($req);
#print $res->status_line,$/,$res->headers->as_string; #500 ??
# make sure the kid is dead
wait;
}
# tests with lwp-request:
# HTTPS_PROXY=http://localhost:8080/ \
# HTTPS_DEBUG=1 \
# lwp-request -P -des https://www.nodeworks.com/
#
# -P prevents lwp-request to call env_proxy() on its agent,
# so that Crypt::SSLeay can use the HTTPS_PROXY environment variable