LWP::useragent keep_alive 不工作
LWP::useragent keep_alive not working
我使用下面的代码 post JSON 使用 LWP::useragent 的数据。我想保持我的会话打开和 post 两个请求,但它似乎不能在 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;
Keep-Alive只是建议服务器在请求后不要关闭TCP连接,因为他们的请求会更多。服务器不需要遵循建议,事实上很多服务器不会将打开的 TCP 连接数保持在较低水平,这会耗尽系统资源。
除此之外,您不需要显式设置连接和主机 header。
我尝试了以下简化示例,数据包捕获显示,如果服务器支持它 (LWP 6.05),则保持活动状态正在运行。支持意味着服务器保持连接打开并且不设置 "Connection: close" header 并且使用 HTTP/1.1 或使用 HTTP/1.0 和 "Connection: keep-alive" header.
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;
已解决...不是因为后端服务器关闭了连接。我想我使用的是旧的 perl (5.10) 和旧的 fedora 版本。我旋转了一个新的 CentOs 实例及其工作。谢谢
我使用下面的代码 post JSON 使用 LWP::useragent 的数据。我想保持我的会话打开和 post 两个请求,但它似乎不能在 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;
Keep-Alive只是建议服务器在请求后不要关闭TCP连接,因为他们的请求会更多。服务器不需要遵循建议,事实上很多服务器不会将打开的 TCP 连接数保持在较低水平,这会耗尽系统资源。
除此之外,您不需要显式设置连接和主机 header。
我尝试了以下简化示例,数据包捕获显示,如果服务器支持它 (LWP 6.05),则保持活动状态正在运行。支持意味着服务器保持连接打开并且不设置 "Connection: close" header 并且使用 HTTP/1.1 或使用 HTTP/1.0 和 "Connection: keep-alive" header.
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;
已解决...不是因为后端服务器关闭了连接。我想我使用的是旧的 perl (5.10) 和旧的 fedora 版本。我旋转了一个新的 CentOs 实例及其工作。谢谢