现在我知道内容类型无法使用。这是工作流的实际摘要或场景,工作流需要更精确,以便准确地解释自己:
请指出我做错了什么。
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;
}
最佳答案
您已经构建了一个无限循环。这就是您的内存不足警告的来源。
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 片段为真,什么都不做(情况总是如此,因此无限循环)
- 从未达到
关闭
。
您的其余代码没问题。
你要做的就是这个。我遗漏了文件句柄的东西。
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;
}
忠告:始终使用严格
和使用警告
,并查看三参数打开和词法文件句柄。这将使您的生活更轻松。
关于xml - 在 perl 中使用 XML 的 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16010674/