【发布时间】:2016-02-22 19:30:19
【问题描述】:
我一直在研究一个用于接收 XML 文件的 API,该文件又会在我们的数据库中读取。解析和所有使用本地 XML 文件。现在最后一步是检查 XML 的接收是否正常以及我遇到了障碍。到目前为止一直在尝试很多不同的东西,但似乎无法让它发挥作用。我们更愿意使用 REST 方法,但如果它真的不起作用,我们愿意切换它。看到很多关于发送或接收 XML 文件的问题,但从来没有组合在一起。所以希望我能得到一个可靠的答案,并且不会错过一个重复的问题。
TL;DR:通过 PHP 发送和接收 XML 文件,不知道我在哪里出错 发送和接收部分在不同的脚本中。
//Sending XML script.
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_MUTE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml',
'Content-length: '.strlen($xmlSend)));
curl_setopt($ch, CURLOPT_POSTFIELDS, array("recXML" => $xmlSend));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
//Receiving XML script
if(isset($_REQUEST['recXML'])){
$xmlTest = $_REQUEST['recXML'];
} else {
echo "NO REQUEST XML FOUND ";
}
if(isset($HTTP_RAW_POST_DATA)){
$xmlTest = $HTTP_RAW_POST_DATA;
} else {
echo " NO RAW DATA ";
}
if(isset($_POST['recXML'])){
$xmlTest = $_POST['recXML'];
}else{
echo " NO XML RECEIVED ";
}
if(!isset($xmlTest)){
return;
}
这不是完整的逻辑,但我认为这些是重要的部分,如果您想要更多代码,请询问。
编辑:
经过一些更改并重新启动我的电脑后,它终于可以工作了。所以不完全确定哪个更改解决了问题,但会在下面发布代码,以防有人能找到它的用途。
//Sending script:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml',
'Content-length: '.strlen($xml)));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
//receiving script
$xmlTest = file_get_contents("php://input");
echo $xmlTest;
$res = simplexml_load_string($xmlTest);
if($res === false){
echo "Failed loading XML: ";
foreach(libxml_get_errors() as $error){
echo "<br>", $error->message;
}
return;
} else {
//print_r($res);
}
【问题讨论】:
-
你得到什么错误?
-
它没有给出错误,只是当XML为空时我返回的消息。