X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite%2FBase.pm;h=f6108f636b56fc0bc2fb7b3ff1ad93aab25da65b;hb=1cfec45c0c1cac8fdebca4313c3bcfb3a9f1ab07;hp=0f2cf2d10d9f8ca55fb795f8d35b19aba9ae3305;hpb=f7d9b22c4ff03be4a8d241015686f09d01a68289;p=videosite.git diff --git a/videosite/Base.pm b/videosite/Base.pm index 0f2cf2d..f6108f6 100644 --- a/videosite/Base.pm +++ b/videosite/Base.pm @@ -10,7 +10,12 @@ use Data::Dumper; sub new { my $class = shift; - my $self = {'_DEBUG' => 0, '_OUT' => sub {printf(@_)}}; + my $self = {'_DEBUG' => 0, + '_OUT' => sub {printf(@_)}, + '_CONNECTORS' => sub { return ({ 'name' => 'direct', + 'schemas' => {} }) }, + '_CONNECTOR' => undef, + }; bless($self, $class); @@ -174,8 +179,68 @@ sub setdebug { sub ua { my $self = shift; + my $ua; + + $ua = LWP::UserAgent->new( + 'agent' => 'Mozilla/5.0', + 'cookie_jar' => HTTP::Cookies->new, + 'timeout' => 15, + ); + + # Remove a currently defined HTTPS proxy. See below for a longer explanation. + delete($ENV{'HTTPS_PROXY'}); + + if (defined($self->{'_CONNECTOR'})) { + my $schemas = $self->{'_CONNECTOR'}->{'schemas'}; + foreach (keys(%{$schemas})) { + $self->debug("Adding schema %s with proxy %s", $_, $schemas->{$_}); + if ($_ eq 'https') { + # OK, so here's the gist. + # + # The usual way of reqesting an HTTPS URL through a proxy is + # to connect to the proxy server, issue a CONNECT request to + # create a channel to the web server and start an SSL session over + # this channel, so there is an end-to-end connection between + # the client and the server. + # + # Setting a proxy for the https schema in LWP WILL NOT ACCOMPLISH + # THIS. + # + # LWP will connect to the proxy server, and issue a standard GET + # request for the target URL, which most proxy servers will refuse + # to get. + # + # The way to use a proxy server is to set some environment variables + # and let the underlying Crypt::SSLeay module do the rest. + # + # This is positively appaling. + $ENV{'HTTPS_PROXY'} = $schemas->{$_}; + } else { + $ua->proxy($_, $schemas->{$_}); + } + } + } + + $self->{_CACHED_UA} = $ua; + + return $ua; +} + +sub _cached_ua { + my $self = shift; + + return $self->{_CACHED_UA}; +} + +sub simple_get { + my $self = shift; + my $url = shift; + my $ua = shift || $self->ua(); + my $r; - return LWP::UserAgent->new('agent' => 'Mozilla/5.0', 'cookie_jar' => HTTP::Cookies->new); + $r = $ua->get($url); + return $r->decoded_content() if $r->is_success(); + return undef; } sub decode_hexurl { @@ -193,4 +258,22 @@ sub decode_querystring { return { map { split /=/, $_, 2; } split /&/, shift }; } +sub connectors { + my $self = shift; + + return $self->{'_CONNECTORS'}->(); +} + +sub selectconn { + my $self = shift; + + $self->{'_CONNECTOR'} = shift; +} + +sub setconn { + my $self = shift; + + $self->{'_CONNECTORS'} = shift; +} + 1;