【发布时间】:2013-05-13 12:36:43
【问题描述】:
新问题:
我正在使用我的 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
有没有办法结束会话?我的 Manager 应用程序的默认会话超时为 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
我想连续多次运行我的脚本,一段时间后我在服务器上打开了一百万个会话。
提前感谢您的任何回答。
【问题讨论】:
-
我打开metacpan.org/module/GAAS/libwww-perl-6.05/lib/LWP/UserAgent.pm 并搜索“连接”。第一个命中提到了一些关于 keep_alive 和连接缓存的内容。我有一种感觉,这可能会有所帮助。
-
你的脚本还在运行吗?据我所知,LWP::UA 不会保持持久连接,除非您在新构造函数的选项哈希中特别请求它。我假设脚本在 linux 上运行,你能做一个
netstat -lnp | grep 8080看看是否 a) 有 perl/script 进程正在运行连接到端口 8080,b) 那个套接字的状态是什么? (即.. CLOSE_WAIT、CONNECTED 等)。 -
谢谢。我认为这可能是 HTTP 基本身份验证问题? AFAIK 基本身份验证不支持“注销”。我的假设是 perl 中的退出会终止我的连接,但我错了。这也在Windows机器上运行。我相当确定它与 HTTP 基本身份验证有关,因为对基本 URL 的简单 GET 不会使会话保持打开状态。我相应地编辑了我的帖子。
标签: perl tomcat lwp basic-authentication lwp-useragent