访问需要用户名/密码的https地址并查看HTTP响应(如果是3xx / 4xx / 5xx)的最简单/最好的方法是什么?
是否可以在不安装额外模块的情况下进行此操作? 这背后的想法只是对内部服务器进行健康检查(自动)。该页面需要我拥有的用户名/密码
答案 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::Message,says it delegates some methods到HTTP::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';