2013-08-15 33 views
6

Używam następujący urywek Perl na Debianie przy użyciu Perl v5.14.2 i libwww-perl v6.04-1LWP odmawia połączenia za pośrednictwem protokołu HTTPS

my $ua = LWP::UserAgent->new; 
my $req = HTTP::Request->new("GET", "https://google.com/"); 
my $rep = $ua->request($req); 
print $rep->status_line; 

Ten natychmiast powraca „500 Nie można połączyć się google.pl:443 ". Próbowałem używać LWP::Simple, Net::SSLeay, Crypt::SSLeay itd. Bez żadnego sukcesu.

Co dziwne, działa ten sam kod w innym systemie Debiana z dokładnie tymi samymi wersjami Perla i LWP.

Pomyślałem, że wystąpił błąd w systemie, ale inne aplikacje - takie jak cURL dla dowolnej przeglądarki - działają poprawnie.

Również zwraca Verify return code: 20 (unable to get local issuer certificate) na systemach zarówno.

Czy ktoś kiedykolwiek napotkał to zjawisko i ma rozwiązanie?

+0

Czy oba debian znajdują się w tej samej sieci? –

+0

Nie. Próbowałem tego z kilkoma systemami w różnych sieciach, również w wersjach innych niż Debiana i innych perl, wydaje się, że problem dotyczy pierwszego systemu. – Tomas

+2

spróbuj 'wget https: // google.com /', aby upewnić się, że sieć nie blokuje ruchu –

Odpowiedz

7

Zamiast tego:

$ua = LWP::UserAgent->new; 

spróbuje użyć tego:

$ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); 
+0

Dziękuję za odpowiedź, ale jak zauważyłem w pytaniu i komentarzach "ustawienie weryfikuj nazwę hosta na zero nie ma znaczenia". Może pomóc w ogólnym przypadku, ale nie w tym konkretnym, który został rozwiązany inaczej, jak można zauważyć, jeśli przeczytasz dyskusję w komentarzach. – Tomas

+0

To zadziałało dla mnie. Czemu? Używam IIS6. –

1

FYI dla innych walczących LWP 500 erors:

Niektóre LWP 500 błędy są najwyraźniej spowodowane przez inny rodzaj Problem z SSL (który nie został rozwiązany przy użyciu ustawienia verify_hostname). Zamiast tego LWP może komunikować się z serwerem HTTPS, ale odpowiedź nie jest zgodna z oczekiwaniami LWP. W moim przypadku, rozwiązanie było zmuszenie SSLv3, za pomocą następujących środków:

my %ssl_options = (SSL_version => 'SSLv3'); 
$ua = LWP::UserAgent->new(ssl_opts => \%ssl_options), 

również dla każdego, kto próbuje dowiedzieć się, jakiego rodzaju błąd 500 otrzymujesz, wyjście tego wraz z błędem:

print $response->as_string; 

Dla mojego problemu (rozwiązany przez ustawienie SSLv3), my $ response-> as_string wyjście obejmowały:

"rutyny SSL: SSL23_GET_SERVER_HELLO: SSLv3 alert nieoczekiwana wiadomość LWP"

Powiem też, że mój kod działa dobrze przez wiele lat we wcześniejszej wersji Ubuntu. Ten problem pojawił się tylko po uaktualnieniu systemu Ubuntu. Doszedłem do wniosku, że prawdopodobnie istnieje wiele sposobów, że nowsze wersje LWP różnią się od starszych, więc programiści się wystrzegają!

Powodzenia w rozwiązywaniu problemu LWP!

1

Miałem ten problem w systemie Windows Server 2003 z Strawberry Perl. Błąd 500 był problemem z IO::Socket::IP.

Przeprowadzenie ponownej instalacji modułu (w cpan, wymuszenie instalacji IO::Socket::IP) rozwiązało problem.

Powiązane problemy