簡體   English   中英

LWP拒絕通過HTTPS連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM