情境: 将使用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中使用属性的例子,那么它是什么呢
感谢:
由于
答案 0 :(得分:3)
尝试发送您的XML数据,因为普通的POST字符串没有提到标题。
在发送使用$generated_xml = urlencode($generated_xml);
之前。
在外部服务器端使用$generated_xml = urldecode($generated_xml);
并解析数据。
答案 1 :(得分:0)
尝试使用&amp; 实体替换单引号进行编码。
或许解析器不喜欢你的属性是单引号,只能识别双引号,所以试试这个:
<input name=\"id\">