我想通过perl脚本登录http://www.tennisinsight.com/match_previews.htm并下载页面。我被困在通过脚本登录网站
1该网站使用cookie来存储登录数据。
2登录表单由javascript触发,但这并不重要,因为本地的简单网页只包含:
<form action="http://www.tennisinsight.com/myTI.php" method="POST">
<input name="username" type="text" size="25" />
<input name="password" type="password" size="25" />
<input name="mySubmit" type="submit" value="Submit!" />
</form>
如果使用正确的用户名和密码将发送所需的数据,网站将重定向到主页面,用户登录,并创建cookie。简而言之,一个包含正确数据的简单帖子就可以在客户端完成。
3.一旦提供了正确的cookie,我已成功尝试并使用curl获取了我需要的页面。
我认为发布到myTI.php,存储返回的cookie,然后在读取cookie时打开正确的页面就可以了,但是我在保存cookie部分失败了....
这是我尝试获取cookie的脚本,它目前在stdout中打印
use warnings;
use HTML::Tree;
use LWP::Simple;
use WWW::Mechanize;
use HTTP::Request::Common;
use Data::Dumper;
my $username = "user";
my $password = "pass";
my $site_url = 'http://www.tennisinsight.com/myTI.php';
my $mech = WWW::Mechanize->new( autocheck => 1 );
# print $mech->content;
my $response = $mech->post($site_url ,
[
'username' => $username,
'password' => $password,
]) ;
my $cookie_jar = HTTP::Cookies->new;
$cookie_jar->extract_cookies( $response );
print $cookie_jar;
编辑: 我找到了如何存储cookie的例子,问题是我得到一个空文件(或空stdout ......看来被调用的php会在存储cookie之前重定向,登录将失败
我很抱歉,但我是perl的新手,似乎我错过了什么
答案 0 :(得分:0)
根据HTTP::Cookies模块文档,您可以为构造函数提供以下参数,以便将cookie存储在磁盘上。
file => "/path/to/cookies"
autosave => 1
方法load
也存在,以便从磁盘加载cookie。
答案 1 :(得分:0)
我遇到了同样的问题,看起来像Mechanize没有在请求之间传递cookie。为了调试,我让Mechanize将cookie写入磁盘
my $mech = WWW::Mechanize->new(file => "/path/to/cookies");
当我这样做时,我得到了一个文件作为内容(即&#34;空&#34; cookies文件):
#LWP-Cookies-1.0
正如gangabass建议的那样,我改变了我的用户代理
$mech->agent_alias('Linux Mozilla');
然后cookie开始出现在文件中,并在后续请求之间传递。问题解决了。
修复它的是agent_alias
调用,而不是将cookie写入磁盘。