【发布时间】:2009-12-10 10:11:55
【问题描述】:
场景: 通过 cURL 将使用 php 生成的 XML 发送到外部服务器进行解析。
问题: XML 包含使用 cURL 发送时会导致问题的标记属性
代码:
$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 了解不多
当发送到通过 cURL 解析 XML 的页面时,它返回“XML 文档解析失败”,但是当使用他们的测试表单时,它通过 POST 表单直接提交到服务器,它工作正常并返回正确的数据.
问题与<input> 标记的属性有关,删除它们可以使xml 在服务器上正确解析,但返回空,因为从服务器检索数据需要这些属性。
我无法访问指示 XML 的解析页面,尽管那里有一个联系人可以将编码更改为不需要属性,尽管我认为可以在不进行更改的情况下执行此操作.
问题:
为什么发送 HTTPHEADER 会导致解析器认为发送的信息不是 XML,这与我发送 XML 的方式有关吗?
是否可以阻止 XML 在 php 中解析(如果这是问题的一部分)
我以前见过在 cURL 中使用属性的例子,这是怎么回事
谢谢:
谢谢
【问题讨论】: