我正在尝试对webservice执行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 Transfer-Encoding:chunked Content-Type:text / xml服务器:Microsoft-HTTPAPI / 2。0日期:10月25日星期五 2013 16:44:53 GMT f8ac1882-e219-47b7-8d5a-71f64ee04caf https://payment.microincasso.nl/Payment/xxxxxxxxxxxxx endof:sXML解析XML警告:SimpleXMLElement :: __ construct() [simplexmlelement .-- construct]:实体:第1行:解析器错误:开始 标签预期,'<'在D:\ Users \ xxxxxx \ send.php上找不到 第46行
警告:SimpleXMLElement :: __ construct() [simplexmlelement .-- construct]:HTTP / 1.1 200 OK 第46行的D:\ Users \ xxxxxx \ send.php
警告:SimpleXMLElement :: __ construct() [simplexmlelement .-- construct]:^ in 第46行的D:\ Users \ xxxxxx \ send.php
致命错误:未捕获的异常'异常',消息'字符串可以 在D:\ Users \ xxxxxx \ send.php中不被解析为XML':46 Stack 跟踪:#0 D:\ Users \ xxxxxx \ send.php(46): SimpleXMLElement-> __ construct('HTTP / 1.1 200 OK ...')#1 {main}抛出 在D:\ xxxxxx \ send.php第46行
简而言之,我想要获得的链接就是响应。响应包含我需要的东西。但是,响应似乎不是XML。如果直接导航到https://secure.microincasso.nl/PaymentCampaign/,您将看到XML。我究竟做错了什么?为什么我不在php脚本中使用XML而是使用纯文本?我如何获得原始XML?
答案 0 :(得分: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数据的正确方法