簡體   English   中英

如何從Perl執行經過身份驗證的https訪問

[英]How to do authenticated https access from perl

訪問需要用戶名/密碼的https地址並檢查HTTP響應(如果是3xx / 4xx / 5xx)的最簡單/最佳方法是什么?

是否可以在不安裝額外模塊的情況下做到這一點?
其背后的想法只是對內部服務器進行健康檢查(自動)。 該頁面需要我擁有的用戶名/密碼

嘗試使用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";
}

如果您想開箱即用,則可以使用LWP :: UserAgent並創建自己的HTTP :: Request對象,該對象具有authorization_basic方法 在文檔中很難找到。 它來自HTTP :: Message ,它說它將一些方法委托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';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM