2013-05-13 52 views
1

新问题:Perl的LWP紧密结合手动

我做我的Perl脚本如下:

use strict; 
use warnings; 
use LWP 5.64; 

my $browser = LWP::UserAgent->new(); 
$browser->credentials( 
'localhost:8080', 
'Tomcat Manager Application', 
'admin' => '123' 
); 

my $app_url = qq(http://localhost:8080/manager/list); 
my $response = $browser->get($app_url); #this starts the Tomcat Manager Application 
#do something 
#end the tomcat manager application/terminate the session 

有没有办法来结束会话?我的管理员应用程序的默认会话超时时间为30分钟。我试过的是:

my $browser = LWP::UserAgent->new(); 
$browser->conn_cache(LWP::ConnCache->new()); 

但它仍然会一直打开一个新的会话。

我认为改变$browser->timeout不是正确的方法,因为我需要在我已收到回应后终止会话。

任何帮助将不胜感激。


老问题:

有没有办法使用手动LWP来结束我的会议?我有类似:

use strict; 
use warnings; 
use LWP 5.64; 

my $app_url = 'htpp://localhost:8080/manager/list' 
my $base_url = 'http://localhost:8080' 

my $browser = LWP::UserAgent->new; 
$browser->credentials( 
'localhost:8080/manager/list', 
'Tomcat Manager Application', 
'admin' => '123' 
); 

my $response = $browser->get($base_url); #session does not remain open 
my $respuesta = $browser->get($app_url); #session remains opened 
#do some processing 
#and now close the connection 

我想运行我的脚本很多连续四次过了一会我在服务器上有一百万打开的会话。

非常感谢您提供任何答案。

+0

我拉起来https://metacpan.org/module/GAAS/libwww-perl-6.05/lib/LWP/UserAgent.pm并搜索 “连接”。第一次打击提到了keep_alive和连接缓存。我有一种感觉,这可能有帮助。 – innaM 2013-05-13 13:15:36

+0

你的脚本仍在运行?据我所知,LWP :: UA不会保持持久连接,除非你特别要求它在新构造函数的选项哈希中。我假设脚本在linux上运行,你可以做一个'netstat -lnp | grep 8080'并查看是否a)有连接到端口8080的perl/script进程,以及b)该socket的状态是什么? (即.. CLOSE_WAIT,CONNECTED等)。 – 2013-05-13 13:48:24

+0

谢谢。我认为这可能是HTTP基本身份验证问题? AFAIK基本身份验证不支持“注销”。我的假设是,perl中的退出将会终止我的连接,但我错了。这也是在Windows机器上运行。我相当肯定它与HTTP基本身份验证有关,因为对基本URL的简单GET不会使会话保持打开状态。我相应地编辑了我的帖子。 – user2236021 2013-05-13 14:15:56

回答

0

你可以设置一个超时的连接:

$browser->timeout([$secs]) 

默认情况下,超时时间为180秒。您可以指定较小的值,并且连接将更快地关闭。

+0

理论上这应该是工作的,但事实并非如此。 – user2236021 2013-05-14 08:28:10

+0

这很奇怪,但尝试我的第二个选项;) – 2013-05-14 11:46:17

0

试试这个:

my $response = $browser->get($base_url); #session does not remain open 
my $respuesta = $browser->get($app_url); #session remains opened 
if($respuesta->is_success){ 
    #do some processing 
    die "OK"; 
} 
return 1; 
+0

感谢德米特里,我欣赏它。但它仍然无法正常工作。我真的认为它是一个HTTP基本身份验证/ Tomcat问题。我试过超时和上面提到的keep_alive选项,但两次都不行。基本上我在做什么是我用我的Perl脚本启动一个Tomcat应用程序,我不知道如何关闭它。执行我的脚本每次都会打开一个新的会话。我希望传递keep_alive可以解决这个问题 – user2236021 2013-05-14 12:37:06