我是WWW::Mechanize的新手,但我知道如何登录,然后在我登录时如何使用follow_link
方法访问其他网页。但是当我想访问某个链接时直接在页面上没有,我丢失了我的身份验证。
问题的快速示例:
my $LoginURL = "http://www.website.com/user/login.jsp?";
my $DirectURL= "/Somefile?param1¶m2";
$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
方法访问页面上不存在的网址时,我只是丢失了身份验证。
当我想访问不在当前页面上的直接网址时,我需要做些什么才能保持身份验证?
答案 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¶m2