我是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方法访问页面上没有的URL时,我只会丢失身份验证。

当我想访问不在当前页面上的直接URL时,为了保持身份验证我该怎么办?

===============>>#1 票数:-1

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

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

希望能帮助到你。

===============>>#2 票数:-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

  ask by Alexander translate from so

未解决问题?本站智能推荐:

关注微信公众号