在perl中使用XML的POST请求

时间:2013-04-15 08:23:37

标签: xml perl post

现在我得到的内容类型无法使用。这是工作流的实际摘要或场景,工作流需要更精确,以便它准确地解释自己:

请说明我做错了什么。

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;

}

1 个答案:

答案 0 :(得分:6)

你已经构建了一个inifinte循环。这就是你的内存不足警告的来源。

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设为'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,并查看三参数打开和词法文件句柄。这将使您的生活更轻松。