2

现在我得到那个内容类型不能被消费。这是工作流的实际摘要或场景,工作流需要更精确,以便准确地解释自己:

请建议我做错了什么。

use LWP::UserAgent;
use HTTP::Request::Common;
my $sendXML="INPUT.XML";
my $resultXML="RESULT.XML";
my $message = <<'XML';
<criteria>
<includeFilterSets>
        <filterSet>
            <filter>
                <filterName>PRODUCT_NAME</filterName>
                </filterSet>
    </excludeFilterSets>
    </entityToSearch>
<criteria>
XML

my $webpage="http://example.com/";
#my $webpage = HTTP::Request->new(GET => 'http/Testlocation');
my $ua = LWP::UserAgent->new; 
my $response = $ua->post($webpage, Content_Type => 'text/xml', Content => $message);
if ($response->is_success) {
    print $response->decoded_content;  # or whatever
}
else {
    #die $response->status_line;
    print $response->decoded_content;

}
4

1 回答 1

6

你已经建立了一个无限循环。这就是您的内存不足警告的来源。

my $message="test"; 
open(XML,$sendXML); 
while ("
    <includeFilterSets>
        <filterSet>
            <filter>
                <filterName>VERSION_NAME</filterName>
                <operator>
                    <name>In</name>
                </operator>
                <value>10.0u</value>
                </filter>
        </filterSet>
    </includeFilterSets>") {
} 
close XML;

我不知道你想用这个实现什么,但这不是你想做的。此代码段执行以下操作:

  • 设置$test为“测试”
  • 打开文件名的文件句柄$sendXML
  • 只要 XML 片段为真,什么都不做(总是如此,因此是无限循环)
  • close永远都达不到。

您的其余代码都可以。

你想做的就是这个。我遗漏了文件句柄的东西。

my $message = <<'XML';
<includeFilterSets>
        <filterSet>
            <filter>
                <filterName>VERSION_NAME</filterName>
                <operator>
                    <name>In</name>
                </operator>
                <value>10.0u</value>
            </filter>
    </filterSet>
</includeFilterSets>
XML

my $webpage="http://example.com/";
my $ua = LWP::UserAgent->new; 
my $response = $ua->post($webpage, Content_Type => 'text/xml', Content => $message);
if ($response->is_success) {
    print $response->decoded_content;  # or whatever
}
else {
    die $response->status_line;
}

一个忠告:总是use strictuse warnings,看看三个参数打开和词法文件句柄。这会让你的生活轻松很多。

于 2013-04-15T09:15:54.333 回答