2014-07-11 7 views
5

Ich versuche ein Skript zu erstellen, das einfach nur eine Verbindung zu einer Website herstellt. Aus irgendeinem Grund wird es jedoch keine Verbindung zu irgendetwas herstellen, das HTTPS verwendet.Ich kann keine Verbindung zu einer HTTPS-Site mit LWP :: UserAgent herstellen

Wir haben hier einen Proxy aktiviert. Ich glaube jedoch, dass der Proxy nicht das Problem ist, denn wenn ich eine Verbindung zu einem HTTPS innerhalb des Netzwerks herstelle, das nicht durch einen Proxy tunnelt, schlägt es immer noch fehl.

Wenn ich dieses Programm auf einer Website ausführen würde, die nicht HTTPS verwendet, kann ich durch und das Skript funktioniert wie vorgesehen.

Ich frage mich, was könnte möglich sein, indem Sie das Skript von der Verbindung zu SSL-geschützten Websites zu blockieren. Hier

ist der Code, den ich schrieb:

$ENV{HTTPS_DEBUG} = 1; 

my $ua = LWP::UserAgent->new(keep_alive => 1); 
$ua->agent('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36'); 
my $pac = HTTP::ProxyPAC->new(URI->new("http://pacfilelocation:8080/pac_file.pac")); 
my $res = $pac->find_proxy("https://www.google.com"); 


if ($res->direct) { 
    print "No Proxy Needed\n"; 
} elsif ($res->proxy) { 
    print "Proxy: " . $res->proxy . "\n"; 
    $ENV{HTTPS_PROXY} = $res->proxy; 
    $ENV{HTTP_PROXY} = $res->proxy; 
    $ua->env_proxy; 
} 

my $req = new HTTP::Request('GET', 'https://www.google.com/'); 
$req->header('Accept' => 'text/html'); 
$req->header('Host', 'www.google.com'); 

my $res2 = $ua->request($req); 

if ($res2->is_success) { 
    print $res2->decoded_content; 
} else { 
    print "Error: " . $res2->status_line . "\n"; 
} 

Die HTTPS_DEBUG Funktion aus irgendeinem Grund Ausgang nicht die Debug, die dies umso mehr schwer zu lösen macht.

Wenn das Skript ich eine generische Fehlermeldung erhalten läuft:

Error: 500 Can't connect to www.google.com:443 

Jede Hilfe wäre toll!

Antwort

7

Bitte stellen Sie sicher, dass Sie mindestens Version 6.06 von LWP :: UserAgent und Version 6.06 von LWP :: Protocol :: https verwenden. Alle vorherigen Versionen haben keine ordnungsgemäße Unterstützung für https-Proxy, zumindest nicht, wenn IO :: Socket :: SSL als zugrunde liegende SSL-Bibliothek verwendet wird.

Um die Versionen erhalten Sie ausgeführt werden:

use LWP::UserAgent; 
use LWP::Protocol::https; 
print "LWP::UserAgent: ".LWP::UserAgent->VERSION,"\n"; 
print "LWP::Protocol::https: ".LWP::Protocol::https->VERSION,"\n"; 

Wenn Sie etwas verwenden weniger als die erforderlichen Versionen aktualisieren. Während dies für LWP :: UserAgent einfach ist, installiert cpan möglicherweise nicht die neueste Version von LWP :: Protocol :: https standardmäßig, siehe http://www.nntp.perl.org/group/perl.libwww/2014/05/msg7718.html. In diesem Fall müssen Sie es explizit von http://search.cpan.org/~mschilli/LWP-Protocol-https-6.06/ bekommen.

Wenn Sie auf einem aktuellen Debian-System oder Ubuntu> = 14.04 sind, haben Sie immer noch die Version 6.04 von LWP :: Protocol :: https, aber dies beinhaltet bereits die notwendigen Patches für die korrekte https-Proxy-Unterstützung. Die andere Alternative wäre, das alte Net :: SSL/Crypt :: SSLeay-Backend für LWP zu verwenden, aber ich rate davon ab, da es nicht alle notwendigen Zertifikatsprüfungen implementiert und somit einen Man-in-the-Mount einbaut Der mittlere Angriff dagegen ist einfach.

+1

Upgrade von LWP :: Protokoll :: https zu 6.06 hat funktioniert. Vielen Dank! Hinweis: Ich musste 6.06 manuell installieren, da cpan 6.04 verwendet hat – theEli

Verwandte Themen