0

我正在尝试对 web 服务执行 POST 操作,该操作应返回 XML 文件。之后,我尝试显示 XML 文件。我的 .php 目前看起来像这样:

echo "Downloading XML" . "\n";

$xml = file_get_contents('xml.xml');
$ch  = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://secure.microincasso.nl/PaymentCampaign/");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-type: text/xml'
));

$sXML = curl_exec($ch);
curl_close($ch);

echo "sXML: " . "\n";
echo $sXML;
echo "\n" . "endof:sXML" . "\n";

echo "Parsing XML\n";
$oXML = new SimpleXMLElement($sXML);
echo "\nXML parsed\n\n";
foreach ($oXML->entry as $oEntry)
{
    echo $oEntry->title . "\n";
}

如您所见,该xml.xml文件作为 POST 参数发送。这个 XML 文件是正确的。我得到的输出如下:

下载 XML sXML:HTTP/1.1 200 OK 传输编码:chunked 内容类型:text/xml 服务器:Microsoft-HTTPAPI/2.0 日期:2013 年 10 月 25 日星期五 16:44:53 GMT f8ac1882-e219-47b7-8d5a-71f64ee04caf https://payment.microincasso.nl/Payment/xxxxxxxxxxxxx endof:sXML 解析 XML 警告:SimpleXMLElement::__construct() [simplexmlelement.--construct]:实体:第 1 行:解析器错误:需要开始标记,'<' 不是在第 46 行的 D:\Users\xxxxxx\send.php 中找到

警告:SimplexmlElement::__construct() [simplexmlelement.--construct]: HTTP/1.1 200 OK in D:\Users\xxxxxx\send.php 第 46 行

警告:SimplexmlElement::__construct() [simplexmlelement.--construct]: ^ in D:\Users\xxxxxx\send.php 第 46 行

致命错误:在 D:\Users\xxxxxx\send.php:46 中未捕获的异常 'Exception' 带有消息 'String could not be parsed as XML' 堆栈跟踪:#0 D:\Users\xxxxxx\send.php(46) : SimpleXMLElement->__construct('HTTP/1.1 200 OK...') #1 {main} 在第 46 行的 D:\xxxxxx\send.php 中抛出

简而言之,我想要获得的链接在响应中。响应包含我需要的东西。但是,响应似乎不是 XML。如果您直接导航到https://secure.microincasso.nl/PaymentCampaign/,您将看到 XML。我究竟做错了什么?为什么我的 php 脚本中没有 XML 而是纯文本?我如何获得原始 XML?

4

1 回答 1

2

我认为问题仍然存在

curl_setopt($ch, CURLOPT_HEADER, 1);

来自 php.net:“TRUE 以在输出中包含标题。”

正如错误跟踪所说:

SimpleXMLElement->__construct('HTTP/1.1 200 OK...') #1

我认为最好拿出来

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

因为你已经在做

curl_setopt($ch, CURLOPT_POST, 1);

这是发送 POST 数据的正确方法

于 2013-10-25T17:38:41.860 回答