为什么LWP :: UserAgent GET请求会因HTTPS而失败?

时间:2010-09-16 05:38:35

标签: perl

这是我的代码

#!/path/to/perl
use strict;
use LWP::UserAgent;
use HTTP::Request::Common;
use Crypt::SSLeay;

$ENV{HTTPS_PROXY} = 'http://proxy:8080/';

$ENV{HTTPS_DEBUG} = 1;


my $myurl = "https://www.redhat.com";

my $ua = new LWP::UserAgent;
$ua->cookie_jar( {} ); 
$ua->protocols_allowed( [ 'http','https'] );
$ua->proxy(['http', 'https'], 'http://proxy:8080/');

my $page = $ua->get($myurl);

die "Error $myurl\n ", $page->status_line, "\n Aborting" 
unless $page->is_success; 
print "Success", $page1->content_type, " document!\n"; 

返回

Error at https://www.redhat.com
400 Bad Request
Aborting at test.pl line 30.

出了什么问题?

编辑:

显然,它是bug。但是解决方法对我不起作用。

4 个答案:

答案 0 :(得分:1)

哈!我得到了答案!

1)删除ENV {HTTPS_PROXY}

端口后的'/'

2)显然,LWP的代理系统发送'GET'请求而不是CONNECT请求,因此只需设置环境变量并删除代理命令即可使用Crypt :: SSLeay的代理系统。

答案 1 :(得分:1)

在某些系统上,例如Debian,你需要安装适当的SSL库才能使用。这些系统上的错误消息有时会有点误导。我认为Debian软件包将是libnet-ssleay-perl。

答案 2 :(得分:1)

我刚刚将LWP :: Protocol :: connect模块上传到CPAN。此模块将缺少的HTTP / CONNECT方法支持添加到LWP。

 use LWP::UserAgent;

 $ua = LWP::UserAgent->new(); 
 $ua->proxy('https', 'connect://proxyhost.domain:3128/');

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

使用此模块,您可以使用常规IO :: Socket :: SSL实现LWP> = 6.00。

答案 3 :(得分:0)

您的代理服务器似乎不接受HTTPS连接。您是否尝试在自己喜欢的浏览器中进行设置并查看网址?