簡體   English   中英

使用LWP :: UserAgent的基於代理的Perl HTTPS

[英]Perl HTTPS over proxy using LWP::UserAgent

我希望使用perl的LWP :: UserAgent模塊通過HTTPS代理請求URL。 關於此有很多參考,但是沒有什么可以幫助我使其正常工作。

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use Data::Dumper;

BEGIN {
    $ENV{HTTPS_PROXY} = 'https://<IP>:<PORT>';
    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
    $ENV{HTTPS_PROXY_USERNAME} = '<API_KEY>';
    $ENV{HTTPS_PROXY_PASSWORD} = '';
    $ENV{HTTPS_DEBUG} = 1;  #Add debug output
}

my $ua = LWP::UserAgent->new(ssl_opts => {verify_hostname => 0}, SSL_version => 'SSLv3', allowed_protocols => ['https', 'http']);
$ua->proxy(['https', 'http'], 'https://<IP>:<PORT>');
my $req = HTTP::Request->new('GET','https://<DOMAIN_URL>');
print STDERR Dumper($ua);
my $response = $ua->request($req);
print $response->code ."\n";
print STDERR Dumper($response);

我收到此錯誤:

SSL連接嘗試失敗錯誤:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:/home/user/project/local/lib/perl5/LWP/Protocol/http.pm第51行的未知協議。

盡管我在LWP中指定了allowed_protocols,在代理中指定了https方案,而在URL方案中指定了https,但它仍然轉到上述LWP :: Protocol :: HTTP而不是LWP :: Protocol :: HTTPS。

我還驗證了LWP :: Protocol :: HTTPS的版本為6.06,與LWP :: UserAgent相同(在其中一個論壇中提到)。

這為我工作:

use LWP::UserAgent;

$ua = LWP::UserAgent->new(); 
$ua->proxy('https', 'connect://<USER>:<PSWD>@<IP>:<PORT>/');

$ua->get('https://www.somesslsite.com');

HTTPS代理和LWP :: UserAgent

注意:環境憑證(HTTPS_PROXY_USERNAME)對我不起作用。 我必須像上面一樣在URL中輸入它。

最新版本的LWP(從您擁有的6.06版開始)的正確設置是使用與其他應用程序中相同的語法以及proxy功能:

 my $ua = LWP::UserAgent->new;
 $ua->proxy(https => 'http://user:pass@proxy');
 $ua->get('https://server');

或者,您可以將環境變量https_proxy設置為相同的值,即http://user:pass@proxy

在6.06之前的版本中,至少與IO :: Socket :: SSL一起使用時,代理支持才被破壞(自6.0版開始為默認)。 您在問題中使用的語法是針對舊的后端Crypt::SSLeay ,不再建議使用該語法,因為它無法正確檢查證書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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