cURL在使用标签属性时错误地发送XML
场景: 将使用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(如果这是问题的一部分)
我见过之前使用卷曲属性的例子是什么呢这个
感谢:
感谢
尝试发送XML数据作为普通POST字符串不提头。 并在发送之前使用$generated_xml = urlencode($generated_xml);
。
并在外部服务器端使用$generated_xml = urldecode($generated_xml);
并解析数据。
尝试用&者替换它们编码的单引号;实体。
或者,也许解析器不喜欢你的属性在单引号之中,并且只能识别双引号,那么试试这个来代替:
<input name=\"id\">
我将它们从单一改为双重,并且使用了“技术”,但是对于使用实体和其他类似的东西是一样的。感谢 – andyface 2009-12-10 10:39:00
的回复,它似乎只是在我身边使用'urlencode()'而不需要在另一端进行解码。我不会质疑它。 – andyface 2009-12-10 10:49:46