[英]LWP refuses to connect via HTTPS
我使用Perl v5.14.2和libwww-perl v6.04-1在Debian上運行以下Perl代碼片段
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new("GET", "https://google.com/");
my $rep = $ua->request($req);
print $rep->status_line;
這會立即返回“500無法連接到google.com:443” 。 我嘗試過使用LWP::Simple, Net::SSLeay, Crypt::SSLeay
等,沒有任何成功。
奇怪的是,在運行完全相同的Perl和LWP版本的另一個Debian系統上執行相同的代碼。
所以我想,底層系統有一些錯誤,但其他應用程序 - 比如任何瀏覽器的cURL - 都運行正常。
此外, openssl s_client -connect google.com:443
Verify return code: 20 (unable to get local issuer certificate)
在兩個系統上返回Verify return code: 20 (unable to get local issuer certificate)
。
有沒有人遇到過這種現象並有解決方案?
而不是這個:
$ua = LWP::UserAgent->new;
試着用這個:
$ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
其他人與其他人爭奪LWP 500的錯誤:
一些LWP 500錯誤顯然是由另一種類型的SSL問題引起的(使用verify_hostname設置無法解決)。 相反,LWP可能正在與HTTPS服務器通信,但響應不是LWP所期望的。 就我而言,解決方案是通過以下方式強制使用SSLv3:
my %ssl_options = (SSL_version => 'SSLv3');
$ua = LWP::UserAgent->new(ssl_opts => \%ssl_options),
此外,對於任何試圖弄清楚你得到什么樣的500錯誤的人,輸出這個以及你的錯誤:
print $response->as_string;
對於我的問題(通過設置SSLv3解決),我的$ response-> as_string輸出包括:
“SSL例程:SSL23_GET_SERVER_HELLO:sslv3警告意外消息LWP”
我還要說我的代碼在早期版本的Ubuntu上運行了很多年。 這個問題只出現在我升級Ubuntu之后。 我的結論是,LWP的新版本可能有多種方式與舊版本不同,所以開發人員要小心!
祝你好運解決你的LWP問題!
我在帶有Strawberry Perl的 Windows Server 2003上遇到了這個問題。 錯誤500是IO::Socket::IP
。
執行模塊的重新安裝(在cpan
,強制安裝IO::Socket::IP
)解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.