我一直在研究用于接收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);
}
答案 0 :(得分:2)
您应该将内容类型发送为application/xml
所以你的代码将成为
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml',
'Content-length: '.strlen($xmlSend)));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlSend);
在接收方,您可以使用
$xml = file_get_contents("php://input");
对于您当前的代码,您可以将内容类型设置为application/x-www-form-urlencoded
$_POST['recXML']