【问题标题】:cURL sending XML incorrectly when using tag attributes使用标签属性时 cURL 发送 XML 不正确
【发布时间】: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 表单直接提交到服务器,它工作正常并返回正确的数据.

问题与&lt;input&gt; 标记的属性有关,删除它们可以使xml 在服务器上正确解析,但返回空,因为从服务器检索数据需要这些属性。

我无法访问指示 XML 的解析页面,尽管那里有一个联系人可以将编码更改为不需要属性,尽管我认为可以在不进行更改的情况下执行此操作.

问题:

为什么发送 HTTPHEADER 会导致解析器认为发送的信息不是 XML,这与我发送 XML 的方式有关吗?

是否可以阻止 XML 在 php 中解析(如果这是问题的一部分)

我以前见过在 cURL 中使用属性的例子,这是怎么回事

谢谢:

谢谢

【问题讨论】:

    标签: php xml curl


    【解决方案1】:

    尝试将您的 XML 数据作为普通的 POST 字符串发送,不要提及标题。 在发送之前使用$generated_xml = urlencode($generated_xml);

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

    【讨论】:

    • 似乎只在我这边使用urlencode() 就可以工作,而不必在另一端对其进行解码。我不会质疑它。
    【解决方案2】:

    尝试通过将单引号替换为 ' 实体来对单引号进行编码。

    或者解析器不喜欢你的属性在单引号中,并且只识别双引号,所以试试这个:

    <input name=\"id\">
    

    【讨论】:

    • 我将它们从单更改为双,并使用 \" 技术无济于事。使用实体和其他类似的东西也是如此。感谢您的回复
    猜你喜欢
    • 2011-12-16
    • 2012-01-05
    • 1970-01-01
    • 2012-03-30
    • 2016-06-26
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多