2009-12-10 54 views
0

場景: 將使用php生成的XML通過cURL發送到外部服務器進行解析。cURL在使用標籤屬性時錯誤地發送XML

問題: XML包含標籤屬性使用捲曲

代碼發送時會出現問題:

$generated_xml = 
-- NOTE: NOT THE SYNTAX USED IN THE CODE, SPLIT FOR EASE OF READING -- 
"<xconnect> 
    <report> 
     <id>contact_get</id> 
     <input name='email'><![CDATA[EMAIL_CAPTURED_FROM_INPUT]]></input> 
     <input name='id'></input> 
    </report> 
</xconnect>"; 

$aCurlHeaders = array ("Content-Type: text/xml"); 
$hCurl = curl_init(); 

-- NOTE: HTTPHEADER OPTION FAILS (page returns 'no xml sent') -- 

curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($hCurl, CURLOPT_POST, true); 
curl_setopt($hCurl, CURLOPT_CONNECTTIMEOUT, 120); 
//curl_setopt($hCurl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml")); 
curl_setopt($hCurl, CURLOPT_URL, "SITE_URL"); 
curl_setopt($hCurl, CURLOPT_POSTFIELDS, "XMLDOC=$generated_xml"); 

$sResp = curl_exec($hCurl); 

curl_close($hCurl); 

if($sResp){ echo $sResp; } 

進一步瞭解詳細:

我不知道了一個關於捲曲的巨大數量

當發送到通過cURL解析XML的頁面時,它會返回'XML文檔失敗解析',但是當使用通過POST表單直接提交給服務器的測試表單時,它會正常工作並返回正確的數據。

該問題與<input>標記的屬性相關聯,刪除它們可以使xml在服務器上正確解析,但由於需要屬性來從服務器檢索數據,因此將返回空白。

我沒有訪問XML的解析頁面,雖然有一個聯繫人可能能夠改變編碼,不需要屬性,但我本以爲這將有可能做到這一點,而無需做變化。

問題:

爲什麼發送的HTTPHeader導致解析器想發送的信息是不是XML,它是跟我發送XML的方式嗎?

是否有可能從PHP解析塊的XML(如果這是問題的一部分)

我見過之前使用捲曲屬性的例子是什麼呢這個

感謝:

感謝

回答

3

嘗試發送XML數據作爲普通POST字符串不提頭。 並在發送之前使用$generated_xml = urlencode($generated_xml);

並在外部服務器端使用$generated_xml = urldecode($generated_xml); 並解析數據。

+0

的回覆,它似乎只是在我身邊使用'urlencode()'而不需要在另一端進行解碼。我不會質疑它。 – andyface 2009-12-10 10:49:46

0

嘗試用&者替換它們編碼的單引號;實體。

或者,也許解析器不喜歡你的屬性在單引號之中,並且只能識別雙引號,那麼試試這個來代替:

<input name=\"id\"> 
+0

我將它們從單一改爲雙重,並且使用了「技術」,但是對於使用實體和其他類似的東西是一樣的。感謝 – andyface 2009-12-10 10:39:00