使用LWP Perl将非常大的xml发布到url

时间:2018-04-06 07:06:18

标签: xml perl post lwp

我有一个非常大的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文件

2 个答案:

答案 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=更改为接收者需要的内容。