Perl LWP::UserAgent返回不完整的2GB响应消息

Perl LWP::UserAgent返回不完整的2GB响应消息,perl,lwp-useragent,Perl,Lwp Useragent,我正在使用LWP::UserAgent发送URL请求。但在响应中,有时我会得到不完整的XML响应 代码 $args->{pua} = LWP::UserAgent->new(); $args->{header} = HTTP::Headers->new; $args->{header}->header("Content-Type" => "text/xml", "SOAPAction" => $args->{soapaction}); $re

我正在使用
LWP::UserAgent
发送URL请求。但在响应中,有时我会得到不完整的
XML
响应

代码

$args->{pua} = LWP::UserAgent->new();
$args->{header} = HTTP::Headers->new;
$args->{header}->header("Content-Type" => "text/xml", "SOAPAction" => $args->{soapaction});
$request = HTTP::Request->new( "POST", $args->{endpoint}, $args->{header}, $args->{xml});
$response = $args->{pua}->simple_request($request);
my $xmlResponse = $response->content;
$xmlResponse
中,有时我会得到不完整的响应。为什么会这样

负责人

Connection: close
Date: Tue, 19 May 2015 11:07:37 GMT
Server: nginx/1.6.2
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/xml;charset=ISO-8859-1
Client-Date: Tue, 19 May 2015 11:07:40 GMT
Client-Peer: 202.77.98.11:80
Client-Response-Num: 1
Client-Transfer-Encoding: chunked
X-Frame-Options: SAMEORIGIN

当LWP由于超时或其他读取错误而无法读取整个正文时,LWP可能会返回不完整的响应。在这种情况下,
$response->is_success
将为
true
$response->code
将为
200
,但响应头将包含名为
X-Died
的特殊头。 因此,您可以检查此标题:

unless ($response->is_success) {
    die "Response failed: ", $response->status_line;
}

if ($response->header('X-Died')) {
    die "Response failed (internal): ", $response->header('X-Died');
}

我在超时限制内得到响应。我已处理了错误响应。但我想得到响应这可能是其他读取错误,而不仅仅是超时。无论如何,请检查X-Died标题。请显示
print$xmlResponse->headers->as_string
@Borodin响应非常长,接近2-3 gb,我无法发布。您尝试过吗?大概只有十几行。然而,期望2GB HTTP消息完整到达是有点希望的,并且可能是问题的根源。您是要求整个数据库转储还是其他什么?我想问题在于消息的大小。32位有符号值最多可容纳2147483647,因此可以表示最多2GB数据的长度。但请在我询问时发布消息标题。运行此脚本时,您是否至少有4 GB的可用内存?如果您保存到一个文件,而不是试图在内存中保存一个2-3GB的字符串,它是否工作可靠?