我有一个非常大的xml,我试图传递给特定端口上的Spark。以下是我用于使用POST请求提交xml的代码。
my $_fileName = "/home/temp/UTC+08_20180406_1414000_xyz";
open (XMLFILE, $_fileName);
while (<XMLFILE>) {
$_xml.=$_;
}
close (XMLFILE);
my $_url="http://localhost:8100/request/UTC+08_20180406_1414000_xyz";
my $curl = LWP::UserAgent->new();
my $response = $curl->post($_url, 'Content' => $_xml, 'Content-type'=>'text/xml' );
if ($response->is_success)
{
print("new job created (requestId: $_requestId)\n");
return &checkXMLStatus($response->decoded_content);
}
else
{
print("Job can't be processed: ".$response->status_line);
return ("StatusRejected", $response->status_line, 0);
}
当xml很小时,就没有问题了。但是当我提交一个非常大的xml文件说超过100000行时,请求超时时出现以下错误:
在180秒后完全“500读取超时”。 我检查了LWP的CPAN页面,默认超时为180。
是否可以增加超时。是否有任何限制,无法使用LWP ??
使用POST请求发送非常大的xml文件答案 0 :(得分:2)
根据LWP::UserAgent的手册页,该参数名为timeout
,可以通过options
哈希设置,因此要设置超时,比如设置300,创建一行用户代理应阅读:
my $curl = LWP::UserAgent->new( { timeout => 300 } );
答案 1 :(得分:1)
那些僧侣在http://www.perlmonks.org/bare/?node_id=896468
上写下了超时此外,我会检查接收器是否可以处理gzip压缩数据,如果是这样,请使用gzip
仅发送原始字节数的5-10%。节省的时间可能类似。
open my $FH, "gzip < $_filename |" or die;
binmode($FH);
$_xml=do{local$/;<$FH>};
...
my $response = $curl->post( $_url,
'Content' => $_xml,
'Content-Encoding'=>'gzip',
'Content-Type'=>'text/xml' );
如果接收者可以multipart/form-data
,我也会查看:
system(qq(
gzip < $_filename | curl -F"file=@-;type=text/xml;filename=n.xml" -H "Content-Encoding: gzip" $_url
));
...将file=
和filename=
更改为接收者需要的内容。