在post方法,perl,机械化,重定向之后保存cookie

时间:2014-05-08 08:32:26

标签: perl cookies mechanize

我想通过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的新手,似乎我错过了什么

2 个答案:

答案 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写入磁盘。