LWP :: useragent keep_alive无效

时间:2015-07-23 04:18:53

标签: 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 $/ = 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; 

2 个答案:

答案 0 :(得分:1)

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

除此之外,您不需要显式设置Connection和Host标头。

我尝试了以下简化示例,数据包捕获显示,如果服务器支持,则保持活动状态(LWP 6.05)。支持意味着服务器保持连接打开,并且不设置“Connection:close”标头,并且使用HTTP / 1.1或将HTTP / 1.0与“Connection:keep-alive”标头一起使用。

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;

答案 1 :(得分:0)

已解决......这不是由于后端服务器关闭了连接。我想我使用旧的perl(5.10)和旧的fedora版本。我创建了一个新的CentOs实例并开始研究它。感谢