PHP发送和接收XML

时间:2015-11-20 10:37:25

标签: php xml rest

我一直在研究用于接收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);
}

1 个答案:

答案 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']