Perl LWP::useragent保持活动状态未工作

Perl LWP::useragent保持活动状态未工作,perl,perl-module,mod-perl,lwp,Perl,Perl Module,Mod Perl,Lwp,我使用下面的代码使用LWP::useragent发布JSON数据。我想保持会话打开并发布两个请求,但它似乎在linux机器上不起作用(两个post请求在两个会话中而不是一个会话中发送) 有什么建议吗?提前谢谢 #!/usr/bin/perl use warnings; use LWP::UserAgent; use HTTP::Request::Common; open (JSON, "json3.txt") or die "$!"; $raw_string1 = do{ local $/

我使用下面的代码使用LWP::useragent发布JSON数据。我想保持会话打开并发布两个请求,但它似乎在linux机器上不起作用(两个post请求在两个会话中而不是一个会话中发送)

有什么建议吗?提前谢谢

#!/usr/bin/perl

use warnings;
use LWP::UserAgent;
use HTTP::Request::Common;

open (JSON, "json3.txt") or die "$!";
$raw_string1 = do{ local $/ = undef; <JSON>; 
};



my $req = HTTP::Request->new(POST => 'http://www.example.com');


$hdr1 = 'User-Agent';
$val1 = 'Java/1.7.0_45';

$hdr2 = 'Connection';
$val2 = 'keep-alive';

$hdr3 = 'Accept';
$val3 = 'application/json, application/*+json';

$hdr4 = 'Host';
$val4 = 'example.com';

$hdr5 = 'Content-Type';
$val5 = 'application/json;charset=UTF-8';


$req -> header($hdr3 => $val3);
$req -> header($hdr5 => $val5);
$req -> header($hdr1 => $val1);
$req -> header($hdr4 => $val4);
$req -> header($hdr2 => $val2);



$req->content_type("application/json");

$req->content("$raw_string1");

my $ua = LWP::UserAgent->new(keep_alive => 1);
$res = $ua->request($req);
print $res->content;
$res = $ua->request($req);
print $res->content; 
#/usr/bin/perl
使用警告;
使用LWP::UserAgent;
使用HTTP::Request::Common;
打开(JSON,“json3.txt”)或死“$!”;
$raw_string1=do{local$/=undf;
};
我的$req=HTTP::Request->new(POST=>'http://www.example.com');
$hdr1=‘用户代理’;
$val1='Java/1.7.0_45';
$hdr2=‘连接’;
$val2=‘保持活力’;
$hdr3=‘接受’;
$val3='application/json,application/*+json';
$hdr4=‘主机’;
$val4='example.com';
$hdr5=‘内容类型’;
$val5='应用程序/json;字符集=UTF-8';
$req->header($hdr3=>$val3);
$req->header($hdr5=>$val5);
$req->header($hdr1=>$val1);
$req->header($hdr4=>$val4);
$req->header($hdr2=>$val2);
$req->content_type(“应用程序/json”);
$req->content($raw_string1”);
my$ua=LWP::UserAgent->new(keep_alive=>1);
$res=$ua->请求($req);
打印$res->content;
$res=$ua->请求($req);
打印$res->content;

Keep Alive只是建议服务器在请求后不要关闭TCP连接,因为它们将收到更多请求。服务器不需要遵循建议,事实上,许多服务器不需要将打开的TCP连接数保持在较低的水平,这会耗尽系统上的资源

除此之外,您不需要显式地设置连接和主机头

我尝试了下面的简化示例,一个数据包捕获显示,如果服务器支持keep-alive,则keep-alive可以正常工作(LWP 6.05)。支持意味着服务器保持连接打开,不设置“connection:close”头,或者使用HTTP/1.1,或者使用HTTP/1.0和“connection:keep-alive”头


已解决…这不是因为后端服务器关闭了连接。我想我使用的是旧perl(5.10)和旧fedora版本。我创建了CentOs的一个新实例,并正在进行相关工作。谢谢

当您使用keep_alive选项时,只需设置LWP::ConnCache即可获取/设置要缓存的连接数。现在运行这个脚本时,您得到了什么错误/响应?我检查了数据包捕获。关闭连接的不是后端服务器,而是客户端。我尝试了一个简化的示例,它可以正常工作。您确定服务器没有回复“Connection:close”或发出HTTP/1.0响应(隐式定义的Connection:close)?其已解决…这不是因为后端服务器关闭了连接。我想我使用的是旧perl(5.10)和旧fedora版本。我创建了CentOs的一个新实例,并正在进行相关工作。谢谢
my $req = HTTP::Request->new(POST => 'http://www.example.com/');
$req->content_type("application/json");
$req->content("foo");

my $ua = LWP::UserAgent->new(keep_alive => 1);
$res = $ua->request($req);
print $res->content;
$res = $ua->request($req);
print $res->content;