使用标记属性时,cURL错误地发送XML

时间:2009-12-10 10:11:55

标签: php xml curl

情境: 将使用php生成的XML通过cURL发送到外部服务器进行解析。

问题: 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中使用属性的例子,那么它是什么呢

感谢:

由于

2 个答案:

答案 0 :(得分:3)

尝试发送您的XML数据,因为普通的POST字符串没有提到标题。 在发送使用$generated_xml = urlencode($generated_xml);之前。

在外部服务器端使用$generated_xml = urldecode($generated_xml); 并解析数据。

答案 1 :(得分:0)

尝试使用&amp; 实体替换单引号进行编码。

或许解析器不喜欢你的属性是单引号,只能识别双引号,所以试试这个:

<input name=\"id\">