Php 使用标记属性时不正确地发送XML

Php 使用标记属性时不正确地发送XML,php,xml,curl,Php,Xml,Curl,场景: 通过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> <inpu

场景: 通过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; }
$generated\u xml=
--注意:不是代码中使用的语法,拆分是为了便于阅读--
"
联系你
";
$aCurlHeaders=数组(“内容类型:text/xml”);
$hCurl=curl_init();
--注意:HTTPHEADER选项失败(页面返回“未发送xml”)--
curl_setopt($hCurl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($hCurl,CURLOPT_POST,true);
curl_setopt($hCurl,CURLOPT_CONNECTTIMEOUT,120);
//curl_setopt($hCurl,CURLOPT_HTTPHEADER,数组(“内容类型:text/xml”);
curl_setopt($hCurl,CURLOPT_URL,“SITE_URL”);
curl_setopt($hCurl,CURLOPT_POSTFIELDS,“XMLDOC=$generated_xml”);
$sResp=curl\u exec($hCurl);
卷曲关闭($hCurl);
if($sResp){echo$sResp;}
更多详细信息:

$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表单直接提交给服务器)时,它工作正常并返回正确的数据

该问题与
标记的属性有关,删除它们可以使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; }
为什么发送HTTPHEADER会导致解析器认为发送的信息不是XML,这与我发送XML的方式有关吗

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

我以前见过在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; }

谢谢

试着用替换你的单引号来编码实体

或者,解析器不喜欢将属性放在单引号中,而只识别双引号,因此请尝试以下方法:

<input name=\"id\">

尝试用替换你的单引号来编码实体

或者,解析器不喜欢将属性放在单引号中,而只识别双引号,因此请尝试以下方法:

<input name=\"id\">

尝试将XML数据作为正常的帖子字符串发送,不要提及标题。 在发送之前使用
$generated\u xml=urlencode($generated\u xml)

在外部服务器端使用
$generated\u xml=urldecode($generated\u xml)

并解析数据。

尝试将XML数据作为正常的POST字符串发送,不要提及标题。 在发送之前使用
$generated\u xml=urlencode($generated\u xml)

在外部服务器端使用
$generated\u xml=urldecode($generated\u xml)

和分析数据。

我将它们从单更改为双,并使用了\“技术,但没有效果。使用实体和其他类似的东西也是如此。感谢您的回复,我将它们从单更改为双,并使用了\“技术,但没有效果。使用实体和其他类似的东西也是如此。感谢您的回复,虽然它似乎只是在我这边使用
urlencode()
,而不必在另一端进行解码。我不想对此提出质疑。似乎在我这边使用
urlencode()
就可以了,而不必在另一端对其进行解码。我不会质疑这一点。