2013-08-15 15 views
6

sto facendo funzionare il seguente frammento Perl su Debian utilizzando v5.14.2 Perl e libwww-perl v6.04-1LWP non si collega tramite HTTPS

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

Ciò restituisce immediatamente "500 non riesce a collegarsi a google.com:443 ". Ho provato a utilizzare LWP::Simple, Net::SSLeay, Crypt::SSLeay, ecc. Senza alcun successo.

Stranamente, l'esecuzione dello stesso codice su un altro sistema Debian che esegue esattamente le stesse versioni Perl e LWP funziona.

Quindi ho pensato, c'è qualche errore con il sistema sottostante, ma altre applicazioni - come cURL per qualsiasi browser - stanno funzionando bene.

Inoltre, openssl s_client -connect google.com:443 restituisce Verify return code: 20 (unable to get local issuer certificate) su entrambi i sistemi.

Qualcuno ha mai riscontrato questo fenomeno e ha una soluzione?

+0

Sono entrambi debian sulla stessa rete? –

+0

No. Ho provato questo con diversi sistemi su reti diverse, anche non Debian e altre versioni perl, sembra che ci sia un problema con il primo sistema. – Tomas

+2

prova 'wget https: // google.com /' per assicurarti che la rete non stia bloccando il traffico –

risposta

7

Invece di questo:

$ua = LWP::UserAgent->new; 

tenta di utilizzare questo:

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

Grazie per la risposta, ma come ho notato nella domanda e nei commenti "l'impostazione di verify_hostname su zero non fa differenza". Può essere d'aiuto nel caso generale, ma non in quello specifico, che è stato risolto in modo diverso, come puoi osservare leggendo la discussione nei commenti. – Tomas

+0

Questo ha funzionato per me. Perché? Sto usando IIS6. –

1

FYI per gli altri che combattono LWP 500 erori:

Alcuni errori LWP 500 sono apparentemente causati da un altro tipo di Problema SSL (che non è risolto con l'impostazione verify_hostname). Invece, LWP potrebbe comunicare con il server HTTPS, ma la risposta non è ciò che LWP si aspetta. Nel mio caso, la soluzione era quella di forzare SSLv3, attraverso i seguenti mezzi:

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

Inoltre, per chi cerca di capire che tipo di errore 500 che si stanno ottenendo, in uscita questo insieme con il vostro errore:

print $response->as_string; 

per il mio problema (risolto impostando SSLv3), il mio $ response-> as_string uscita incluso:

"routine SSL: SSL23_GET_SERVER_HELLO: SSLv3 avviso messaggio inatteso LWP"

Dirò anche che il mio codice è andato bene per anni su una versione precedente di Ubuntu. Questo problema è apparso solo dopo aver aggiornato Ubuntu. Ho concluso che ci sono probabilmente molti modi in cui le versioni più recenti di LWP differiscono da quelle più vecchie, quindi gli sviluppatori si guardano bene!

Buona fortuna per risolvere il problema LWP!

1

Ho riscontrato questo problema su Windows Server 2003 con Strawberry Perl. L'errore 500 era un problema con IO::Socket::IP.

L'esecuzione di una reinstallazione del modulo (in cpan, forzare l'installazione IO::Socket::IP) ha risolto il problema.

Problemi correlati