我知道这听起来像是一个已经在论坛上问过的问题,但我相信我这里的情况略有不同..
我尝试使用 Perl 登录到需要身份验证的网站。我已经意识到完成此任务最方便的工具是使用 WWW::Mechanize 模块,在该模块中填写和提交表格非常容易。
就我而言,我遇到了以下困难:
- 似乎没有与我要填写的字段相关的“表格”。相反,这些字段被包裹在一个表中
<table></table>
. - 按钮本身似乎启动了一些我知道 Mechanize 模块不支持的 javascript。然而,为了测试这个页面的行为,我在我的 Chrome 浏览器中禁用了 javascript,但我仍然能够点击按钮并登录到该网站。所以我认为 javascript 在这里不是必须的。
我使用以下代码,似乎输入的详细信息(用户/密码)无关紧要,出于某种原因,我总是遵循“成功”场景并收到“登录成功!”:
my $mech = WWW::Mechanize->new( cookie_jar => {}, autocheck => 1, onerror => \&Carp::croak,); # Login Form my $response = $mech->get($url); if (!$response->is_success) { die "Login page unreachable $url: ", $response->status_line, "\n"; } $mech->field('Email', $Email); $mech->field('Password', $Password); $response = $mech->click(); if ($response->is_success) { print "Login Successful!\n"; } else { die "Login failed: ", $response->status_line, "\n"; }
因此,脚本的运行似乎是成功的,但是当我假设我已经登录并尝试从站点获取任何数据时,我看到(在嗅探器中)我被不断转发到“注册”页面。
非常感谢任何帮助!
提前致谢!
最佳答案
如果它不在表单标记中,那么某处有一个提交按钮,它使用 GET 请求将所有变量发送到相同(最有可能)的 URL。
您为什么要尝试使用浏览器模拟单击身份验证按钮,是否有其他隐藏字段或您需要访问的内容?
在我看来,最好的方法是找出实际验证用户和密码的页面,然后对该页面使用 SSL POST 请求。
如果页面有这样的东西:
<input type="text" name="user" />
<input type="password" name="pass" />
通过 HTTP POST 请求发送登录页面(如果未定义
关于perl - 使用 WWW::Mechanize 重定向登录网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657285/