在WWW :: Mechanize中使用`get`直接访问URL时,如何保持身份验证?

时间:2011-12-11 17:43:27

标签: perl authentication mechanize

我是WWW::Mechanize的新手,但我知道如何登录,然后在我登录时如何使用follow_link方法访问其他网页。但是当我想访问某个链接时直接在页面上没有,我丢失了我的身份验证。

问题的快速示例:

my $LoginURL = "http://www.website.com/user/login.jsp?";
my $DirectURL= "/Somefile?param1&param2";
$mech = WWW::Mechanize->new();
$mech->get($LoginURL);
$mech->submit_form( ... ); # fields and stuff, works fine.
$mech->get($DirectURL);    # This part fails and I'm using the direct URL.

我了解如何登录,我可以使用follow_link方法导航,但是当我想使用get方法访问页面上不存在的网址时,我只是丢失了身份验证。

当我想访问不在当前页面上的直接网址时,我需要做些什么才能保持身份验证?

2 个答案:

答案 0 :(得分:-1)

由于HTTP是无状态协议,因此每个请求都与前一个请求无关。在HTTP 1.1之前的版本中,HTTP事务的默认行为是客户端联系服务器,发送请求和接收响应,然后客户端和服务器都断开TCP连接。如果客户端需要服务器上的其他资源,则必须重新建立另一个TCP连接,请求资源并断开连接。如果您已成功通过身份验证,则当您尝试访问下一页时,目标网站可能会“忘记”。尝试查看HTTP“连接”标头中包含的值。它应该是“保持活力”而不是“TE,关闭”。如果这是问题,请尝试修改“连接”标题。你可以尝试这样的事情:

  $mech->add_header(
  "Connection" => "keep-alive",
  "Keep-Alive" => "115");

希望它有所帮助。

答案 1 :(得分:-3)

$ mech-> get()是LWP :: UserAgent的重载。它期望绝对URL。

my $uri = $mech->uri();           # Get the current URI
my $uri->path_query($DirectURL);  # Replace the path with file path
$mech->get($uri->as_string);      # Returns http://www.website.com/Somefile?param1&param2