2013-04-15 94 views
2

现在我得到的内容类型不能被使用。这里是工作流程的实际总结或场景,工作流程需要更加精确,以便能够确切地说明自己:在Perl中使用XML的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; 

} 
+0

请给我们一个更深入的解释你的requeiments –

+2

那么问题是什么?构造XML?把它放到HTTP请求中?在处理XML和在[cpan](https://metacpan.org/)上发出HTTP请求都有很多模块,大多数都有很好的文档。你选择了哪些模块?你不懂的文件怎么样? – Quentin

+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以“测试”
  • $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,并期待在三个参数的打开和词法文件句柄。这会让你的生活变得更轻松。

+0

以及我如何解析我的XML使用POST,因为我想摆脱你提到的无限循环。 –

+0

以及通过simbabque运行建议的代码后,我收到错误消息为“内容类型不能使用”。我该怎么摆脱这个问题。请建议。 –

+0

Simbabque可以请你帮我进一步。 –