2010-09-16 97 views
1

这里是我的代码为什么LWP :: UserAgent GET请求使用HTTPS失败?

#!/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。但是,解决方法对我无效。

回答

0

它看起来像您的代理服务器不接受HTTPS连接。您是否尝试在您喜爱的浏览器中设置并查看网址?

+0

我有。有用。代理不是问题。我的原始帖子中存在一个错误。关于发送GET到代理的一些问题。但解决方法建议不适合我 – aks 2010-09-16 05:56:31

1

哈!我得到了答案!

1)去除“/”后ENV港{HTTPS_PROXY}

2)显然,LWP的代理系统发送“GET”请求,而不是连接请求,仅通过设置,以便使用地穴:: SSLeay的的代理系统环境变量并删除代理命令。

1

在某些系统上,例如, Debian,你需要安装合适的SSL库才能工作。这些系统上的错误消息有时可能会引起误解。我认为Debian软件包是libnet-ssleay-perl。

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'); 

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

相关问题