【问题标题】:Perl HTTPS over proxy using LWP::UserAgent使用 LWP::UserAgent 通过代理的 Perl HTTPS
【发布时间】:2016-09-06 10:27:25
【问题描述】:

我希望使用 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 相同(在某个论坛中提到过)

【问题讨论】:

  • 已修复!有什么建议让我试试
  • 恐怕不是。如果你能提供一个服务器来测试,我可以玩。但在我的脑海中,我没有任何想法。
  • 它是一个带有凭据的私有代理云..
  • 你为什么要设置SSLv3?那是因为你真的需要它,还是因为你在哪里看到它?

标签: perl https proxy lwp lwp-useragent


【解决方案1】:

这对我有用:

use LWP::UserAgent;

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

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

HTTPS Proxy and LWP::UserAgent

注意:环境凭据 (HTTPS_PROXY_USERNAME) 对我不起作用。我必须在上面的 URL 中输入它。

【讨论】:

  • connect:// 方案只有在您安装了LWP::Protocol::connect 时才有效。它也适用于 6.06 之前的 LWP 版本。但是对于从 6.06 开始的版本,我建议使用内置代理工具,因为您不必安装额外的模块。
【解决方案2】:

最新版本的 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,不再推荐,因为它无法正确检查证书。

【讨论】:

猜你喜欢
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多