2013-04-15 138 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可以請你幫我進一步。 –