WWW::Mechanize ssl
am 13.02.2007 18:16:01 von Peter Arnhold
Hallo,
hat irgendwer eine Idee, was ich falsch mache?
Ich will über einen Proxy einen https Request loswerden. Ohne Proxy geht es.
Http mit und ohne Proxy geht auch wunderbar. Https geht nicht:
$mech->proxy(['http','https'], 'http://xxx.xxx.xxx.xxx:3128');
Ethereal verrät mir, dass statt einem CONNECT ein GET an den Proxy raus geht.
Ist das ein Bug? Kann man dass umschiffen?
Gruß,
Peter
Re: WWW::Mechanize ssl
am 13.02.2007 21:16:18 von Christian Lackas
* Peter Arnhold [2007-02-13]:
Hallo Peter,
> hat irgendwer eine Idee, was ich falsch mache?
> Ich will über einen Proxy einen https Request loswerden. Ohne Proxy geht es.
> Http mit und ohne Proxy geht auch wunderbar. Https geht nicht:
> $mech->proxy(['http','https'], 'http://xxx.xxx.xxx.xxx:3128');
> Ethereal verrät mir, dass statt einem CONNECT ein GET an den Proxy
> raus geht. Ist das ein Bug? Kann man dass umschiffen?
wenn der Request doch rausgeht, dann scheint es ja erstmal nicht am Perl
zu liegen.
Ist der Proxy denn entsprechend konfiguriert? Gibt es irgendwelche
Fehlermeldungen, oder wie äussert sich das nicht funktionieren?
Das CONNECT verwendet wird ist richtig, schliesslich soll der Proxy
nicht den Inhalt des GET-Requests sehen (der ist ja verschlüsselt).
Dadurch wird dem Client durch die Proxy quasi eine indirekte Verbindung
zum Server eingerichtet. Da man durch sowas nicht nur HTTP tunneln kann,
ist das nicht auf allen Proxys gern gesehen, insbesondere zu anderen
Ports als 443.
Gruß
Christian
--
Planung ist die Ersetzung des Zufalls durch den Irrtum.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker
Re: WWW::Mechanize ssl
am 13.02.2007 21:28:14 von Max Dittrich
Hi Peter,
Am Tue, 13 Feb 2007 18:16:01 +0100 schrieb Peter Arnhold:
> hat irgendwer eine Idee, was ich falsch mache?
Ich glaube Du machst da nix falsch.
> Ich will über einen Proxy einen https Request loswerden. Ohne Proxy geht es.
> Http mit und ohne Proxy geht auch wunderbar. Https geht nicht:
> $mech->proxy(['http','https'], 'http://xxx.xxx.xxx.xxx:3128');
>
> Ethereal verrät mir, dass statt einem CONNECT ein GET an den Proxy raus geht.
> Ist das ein Bug? Kann man dass umschiffen?
Ich musst auch, wie Du, feststellen das WWW::Mechanize oder genauer
LWP::UserAgent bei Verwendung eines Proxys die Anfrage nicht richtig von
GET in CONNECT umsetzt.
Dann bin ich über Google auf folgenden Hinweis gestossen
http://search.cpan.org/~dland/Crypt-SSLeay-0.53/SSLeay.pm#PR OXY_SUPPORT
wonach SSLeay selber die üblichen Umgebungsvariablen berücksichtigt.
Mit
> $ENV{HTTPS_PROXY} = 'http://www-proxy.t-online.de:80';
> $ENV{HTTP_PROXY} = 'http://www-proxy.t-online.de:80';
> my $ua = LWP::UserAgent->new();
klappt das dann auch schon ganz toll, nur dann kommt das dumme
WWW::Mechanize daher.
Das ruft in seinem Konstruktor ungefragt env_proxy() auf LWP::UserAgent
auf, was dann wieder das "kaputte" Verhalten hervorzaubert.
Unter http://rt.cpan.org/Public/Bug/Display.html?id=6574 gammelt ein
entsprechender Bugreport rum, der aber auch in der aktuellen
Developer-Version 1.21_04 nicht berücksichtigt wird.
# ist Dein Freund :)
Schönen Gruß,
..max *g*
Re: WWW::Mechanize ssl
am 15.02.2007 17:29:15 von Peter Arnhold
Hi Max,
Max Dittrich schrieb:
> Hi Peter,
>
> Am Tue, 13 Feb 2007 18:16:01 +0100 schrieb Peter Arnhold:
>> hat irgendwer eine Idee, was ich falsch mache?
>
> Ich glaube Du machst da nix falsch.
>
>> Ich will über einen Proxy einen https Request loswerden. Ohne Proxy geht es.
>> Http mit und ohne Proxy geht auch wunderbar. Https geht nicht:
>> $mech->proxy(['http','https'], 'http://xxx.xxx.xxx.xxx:3128');
>>
>> Ethereal verrät mir, dass statt einem CONNECT ein GET an den Proxy raus geht.
>> Ist das ein Bug? Kann man dass umschiffen?
>
> Ich musst auch, wie Du, feststellen das WWW::Mechanize oder genauer
> LWP::UserAgent bei Verwendung eines Proxys die Anfrage nicht richtig von
> GET in CONNECT umsetzt.
>
> Dann bin ich über Google auf folgenden Hinweis gestossen
> http://search.cpan.org/~dland/Crypt-SSLeay-0.53/SSLeay.pm#PR OXY_SUPPORT
> wonach SSLeay selber die üblichen Umgebungsvariablen berücksichtigt.
>
> Mit
>> $ENV{HTTPS_PROXY} = 'http://www-proxy.t-online.de:80';
>> $ENV{HTTP_PROXY} = 'http://www-proxy.t-online.de:80';
>> my $ua = LWP::UserAgent->new();
> klappt das dann auch schon ganz toll, nur dann kommt das dumme
> WWW::Mechanize daher.
> Das ruft in seinem Konstruktor ungefragt env_proxy() auf LWP::UserAgent
> auf, was dann wieder das "kaputte" Verhalten hervorzaubert.
>
> Unter http://rt.cpan.org/Public/Bug/Display.html?id=6574 gammelt ein
> entsprechender Bugreport rum, der aber auch in der aktuellen
> Developer-Version 1.21_04 nicht berücksichtigt wird.
>
> # ist Dein Freund :)
Wunderbar, damit kann ich leben.
Als Workaround, der nicht in Mechanize eingreifen muss, geht es auch so:
$ENV{ 'HTTPS_PROXY' } = 'http://www-proxy.t-online.de:80';
$mech = WWW::Mechanize->new();
$mech->{proxy} = {};
$mech->proxy('http', 'http://www-proxy.t-online.de:80');
Dennoch wäre es gut, wenn sich mal jemand um LWP::UserAgent kümmert. Das
Proxy-Handling für https muss schon vor langer Zeit kaputt optimiert worden sein.
Gruß,
Peter