6

所以这让我发疯。基本上,当我硬编码我的用户名和密码时,我可以登录没有问题。但是我想提示用户输入用户名和密码,因为我想与其他人分享这个程序。(该程序应该登录到我们的课程网站并下载我们所有的课程工作信息 - 讲座、硬件等)

此代码有效:

use WWW::Mechanize;
use LWP;

my $username = 'user'; 
my $password = 'pass';

my $mech = WWW::Mechanize->new();
$mech -> cookie_jar(HTTP::Cookies->new());
$mech -> get('log-in url');
$mech -> form_name('theform');
$mech -> field ('username' => $username);
$mech -> field ('password' => $password);
$mech -> click ('log in');
print $mech-> content();

但是,当我尝试提示用户输入登录信息时,它现在可以工作了。打印内容返回登录页面的 html,而不是以下页面(该用户的课程页面)

use LWP;
use WWW::Mechanize;

my $login_url = 'log-in url';
print "\nUser name: ";
my $username = <>;
print "Password: ";
my $password = <>;

my $mech = WWW::Mechanize->new();
$mech -> cookie_jar(HTTP::Cookies->new());
$mech -> get($login_url);
$mech -> form_name('theform');
$mech -> field ('username' => $username);
$mech -> field ('password' => $password);
$mech -> click ('log in');
print $mech-> content();

这真的没有意义,因为它们本质上是一样的。我什至在提示中的引号中输入了用户名/密码,但仍然无济于事......(我也意识到如果没有网站和登录信息,检查起来不会很容易,对此感到抱歉)

4

2 回答 2

13

您需要chomp()根据用户的输入运行:

my $username = <>;
chomp($username);

用户提供的文本末尾有一个回车符,这会破坏您的登录。

于 2011-05-20T18:17:39.900 回答
2

尽管 CanSpice 是正确的,但您可能还想查看Term::ReadPassword,它提供提示,隐藏输入并chomp为您处理!

于 2011-05-21T03:46:26.577 回答