使用LWP::UserAgent获取日志时输出被截断,如何解决?
解决方法
- 修正命令分隔符:多数网络设备的CLI及对应HTTP API用分号作为多命令分隔符,逗号无法被识别。修改请求内容为:
$request->content("command='term length 0; sh log'"); - URL编码命令内容:若设备API要求严格的URL编码,需将分号转义为
%3B,可借助URI::Escape模块处理:use URI::Escape; my $cmd = uri_escape("term length 0; sh log"); $request->content("command='$cmd'"); - 分两次发送命令(保持会话):部分设备的会话级设置(如
term length 0)需单独执行后再发送查询命令,此时要通过cookie维持同一个HTTP会话:my $ua = LWP::UserAgent->new; $ua->cookie_jar({}); # 启用cookie保持会话 # 先执行term length 0 my $req1 = HTTP::Request->new('POST' => $url); $req1->content("command='term length 0'"); $req1->protocol('HTTP/1.0'); my $res1 = $ua->request($req1); # 再执行show log my $req2 = HTTP::Request->new('POST' => $url); $req2->content("command='sh log'"); $req2->protocol('HTTP/1.0'); my $response = $ua->request($req2); warn Dumper($response->content); - 修正代码拼写错误:代码中
$respone为拼写错误,应改为$response,避免后续处理出现异常。
内容的提问来源于stack exchange,提问作者Grandad36
相关产品推荐
相关产品推荐

