使用Perl UserAgent的HTTPS请求

时间:2014-01-03 00:39:13

标签: perl https lwp charles-proxy

我正在尝试使用Perl请求使用HTTPS身份验证的html文档。我过去没有遇到过非HTTPS代码的问题。我目前正在使用LWP :: UserAgent:

#! /usr/bin/perl
use LWP;
use HTTP::Request::Common;

my $browser = LWP::UserAgent->new;
my $baseurl = "https://xyz.url.com/directory";

my $ua = LWP::UserAgent->new(keep_alive=>1);
$ua->cookie_jar({});
$ua->credentials('xyz.url.com:80', '', 'login', 'password');

my $response = $ua->get($baseurl);
print  $response->content();

打印的响应基本上是“401 Unauthorized”页面。我可以通过浏览器登录。浏览器使用弹出窗口显示“需要身份验证 - 服务器xyz.url.com:80需要用户名和密码。服务器说:Blah Blah'我已经阅读了许多帖子,指示安装Crypt::SSLeayLWP::Protocol::https之类的内容。这些已安装。我很难过。

我还下载了一个名为Charles的程序,看看请求/响应是否有任何注意事项,但是我不确定在哪里查看。我曾尝试为这个领域添加'Blah Blah',但这并不成功。可以使用Charles识别领域吗?

2 个答案:

答案 0 :(得分:1)

文档说凭证的第一个参数是<host>:<port> - 也就是说,端口号不是可选的。试试"xyz.url.com:443"。此外,''的领域不会有效,除非这是服务器发送的内容;我相信你真的想用"Blah Blah"作为领域。

答案 1 :(得分:0)

也许是因为你没有设置合适的代理人。试试这个:

#! /usr/bin/perl
use LWP;
use HTTP::Request::Common;

my $baseurl = "https://xyz.url.com/directory";

my $ua = LWP::UserAgent->new(keep_alive=>1);
$ua->agent('Mozilla/5.0');
$ua->cookie_jar({});
$ua->credentials('xyz.url.com', '', 'login', 'password');

my $response = $ua->get($baseurl);
print  $response->content();

另外,我删除了代码中的变量$browser,因为它似乎没有用于任何内容。