【问题标题】:PHP send and receive XMLPHP 发送和接收 XML
【发布时间】: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为空时我返回的消息。

标签: php xml rest


【解决方案1】:

您应该将 content-Type 发送为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']

【讨论】:

  • 要去看看,我想我昨天已经在某个地方尝试过这些不同的组合,但我已经把这个东西改了很多次了,现在不确定了。至少感谢您的回复:D
  • 尝试了您的建议,但仍然收到未找到 XML 的消息。即使在删除所有其他 $_REQUEST、isset() 等之后。但 XML 变量保持为空
  • 试试硬编码的 xml 你是否收到任何数据。可能是因为 xml 的大小
  • 是的.. 已经有了。真的想知道我在哪里犯了错误,因为这似乎是一项平凡的任务..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2013-03-12
  • 1970-01-01
相关资源
最近更新 更多