如何从perl进行经过身份验证的https访问

时间:2015-08-20 07:38:32

标签: linux perl http networking

访问需要用户名/密码的https地址并查看HTTP响应(如果是3xx / 4xx / 5xx)的最简单/最好的方法是什么?

是否可以在不安装额外模块的情况下进行此操作? 这背后的想法只是对内部服务器进行健康检查(自动)。该页面需要我拥有的用户名/密码

2 个答案:

答案 0 :(得分:2)

尝试使用WWW::Mechanize

#!/usr/bin/env perl

use strict;
use warnings;

use IO::Socket::SSL;
use WWW::Mechanize;

my $mech = WWW::Mechanize->new(
    # Need ssl_opts if trying to get past an invalid certificate...
    ssl_opts => {
        SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE,
        verify_hostname => 0,
    },
    # Do not die if the page fetch fails
    autocheck => 0,  
);

# user, password
$mech->credentials( 'robot_user', 'r0B07_U$3r_p4$$\/\/0rD' );

$mech->get("https://foo.bar.baz.com/secret_url.html");
if ($mech->success) {
    print "==> SUCCESS\n";
    print $mech->content();
} else {
    print "==> FAILURE\n";
    print "HTTP STATUS [ " . $mech->status . " ]\n";
}

答案 1 :(得分:2)

如果您想要开箱即用,则可以使用LWP::UserAgent并创建自己的HTTP::Request对象,其中包含authorization_basic method。在文档中找到它有点难。它来自HTTP::Messagesays it delegates some methodsHTTP::Headers

  

HTTP :: Message本身未知的所有方法都被委托给HTTP :: Headers对象,该对象是每条消息的一部分。这样可以方便地访问这些方法。有关这些方法的详细信息,请参阅HTTP :: Headers

对于契约,您可以使用HTTP:Request::Common

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common;

my $req = GET 'https://www.example.org';
$req->authorization_basic('user', 'password');

my $ua = LWP::UserAgent->new;
my $res = $ua->request($req);

print $res->code;

<强>输出:

200

如果您对内容不感兴趣,也许HEAD请求就足够了。这将节省一些时间,因为没有人通过网络发送。

my $req = HEAD 'https://www.example.org';