2009-12-10 36 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