2013-10-16 29 views
1

我正在測試一個XML API,它正在成功擊中我的帳戶,並且我得到一個響應,但響應似乎是一個沒有標記或任何內容的純文本字符串,甚至沒有名稱/配對值。我需要將響應作爲XML採集,以便我可以使用XML標記來識別響應變量。如何使用PHP強制XML響應CURL

我使用表單POST來將表單中的數據傳遞到CURL頁面,該頁面將POST解析爲XML格式,然後使用CURL將其發送到API。這個API是基於XML的,我希望得到一個XML響應,但是它會收到

幫助!

捲曲的請求/響應PAGE

     <?php 
        if ($_SERVER['REQUEST_METHOD'] == 'POST') 
        { 
         $xml = "<?xml version='1.0' encoding='UTF-8'?>"; 
         $xml .= "<request>"; 

         foreach ($_POST as $key => $val) { 
          $xml .= "<".$key.">". $val ."</".$key.">"; 
         } 
         $xml .= "<username>user1234</username>"; 
         $xml .= "<password>pass1234</password>"; 
         $xml .= "</request>";    

         echo "<br/>" . $xml . "<br/><br/>"; 

         $ch = curl_init(); 
         curl_setopt($ch, CURLOPT_URL, 'https://www.beanstream.com/scripts/process_transaction.aspx'); 
         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
         curl_setopt($ch, CURLOPT_HEADER, 1); 
         curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/xml')); 
         curl_setopt($ch, CURLOPT_POST, 1); 
         curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 

         $output = curl_exec($ch); 
         curl_close($ch); 

         print_r($output);  
        } 
        ?> 

API響應與頭

HTTP/1.1 200 OK Cache-Control: private Content-Length: 724 Content-Type: application/xml; charset=utf-8 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Set-Cookie: ASP.NET_SessionId=1p4jp2uoz2de3f45iolold3j; path=/; HttpOnly Date: Wed, 16 Oct 2013 21:39:38 GMT 1100001211ApprovedQCE9HW5ETESTNT53.4810/16/2013 2:39:38 PM1W001Postal/ZIP matches, street address does not match.1VIPCC7 
+1

它返回的罰款。不要在瀏覽器中查看它,查看頁面的_source_(呈現爲「html」將隱藏所有標記和換行符等) – Wrikken

+0

您是對的,我可以在頁面源中看到XML格式。如何在屏幕上將響應顯示爲XML樹?有沒有簡單的方法來做到這一點沒有JavaScript? –

+0

任何人都知道我可以如何在屏幕上將XML顯示爲XML樹,類似於如果您在Web瀏覽器中打開XML文檔? –

回答

8

你只是吐出的結果,很可能到瀏覽器中。該瀏覽器可能試圖將XML標記呈現爲HTML,並且因爲它們不是真正的HTML而失敗。未知的標籤只是不呈現。

嘗試「查看源文件」,你會看到你的XML,或做

echo '<pre>'; 
echo htmlspecialchars(print_r($output, true)); 
echo '</pre>'; 
+0

感謝一百萬次+1。我花了整整一天的時間來解決這個問題。 – Sukeshini

1

或者什麼馬克乙說,你也可以爲了轉發Content-Type,讓您的瀏覽器中顯示XML文檔如果您直接訪問它,也是如此。

你可以這樣做實現這一目標:

header('Content-Type: application/xml; charset=utf-8'); 
echo $output;