如何使用PHP CURL强制XML响应

时间:2013-10-16 21:48:37

标签: php xml curl

我正在测试一个成功访问我帐户的XML API,我收到了回复,但响应似乎是一个没有标签或任何内容的纯文本字符串,甚至没有名称/对值。我需要将响应捕获为XML,以便我可以使用XML标记来识别响应变量。

我使用表单POST将表单中的数据传递给CURL页面,该页面将POST解析为XML格式,然后使用CURL将其发送到API。 API是基于XML的,我期望XML响应,而是接收

有助于!

CURL REQUEST / RESPONSE PAGE

                        <?php
                    if ($_SERVER['REQUEST_METHOD'] == 'POST') 
                    {
                        $xml = "<?xml version='1.0' encoding='UTF-8'?>";
                        $xml .= "<request>";

                        foreach ($_POST as $key => $val) {
                            $xml .= "<".$key.">". $val ."</".$key.">";
                        }
                        $xml .= "<username>user1234</username>";
                        $xml .= "<password>pass1234</password>";
                        $xml .= "</request>";               

                        echo "<br/>" . $xml . "<br/><br/>";

                        $ch = curl_init();
                        curl_setopt($ch, CURLOPT_URL, 'https://www.beanstream.com/scripts/process_transaction.aspx');
                        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
                        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
                        curl_setopt($ch, CURLOPT_HEADER, 1);
                        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/xml'));
                        curl_setopt($ch, CURLOPT_POST, 1);
                        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

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

                        print_r($output);       
                    }
                    ?>

API回复标题

HTTP/1.1 200 OK Cache-Control: private Content-Length: 724 Content-Type: application/xml; charset=utf-8 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Set-Cookie: ASP.NET_SessionId=1p4jp2uoz2de3f45iolold3j; path=/; HttpOnly Date: Wed, 16 Oct 2013 21:39:38 GMT 1100001211ApprovedQCE9HW5ETESTNT53.4810/16/2013 2:39:38 PM1W001Postal/ZIP matches, street address does not match.1VIPCC7

3 个答案:

答案 0 :(得分:9)

你只是吐出结果,可能是在浏览器中。该浏览器可能正在尝试将XML标记呈现为HTML,并且因为它们不是真正的html而失败。未知标签根本不会被渲染。

尝试使用“查看源代码”,您将看到自己的xml,或者执行

echo '<pre>';
echo htmlspecialchars(print_r($output, true));
echo '</pre>';

答案 1 :(得分:1)

除了Marc B所说的内容之外,您还可以转发Content-Type,以使浏览器以与直接访问XML文档相同的方式显示XML文档。

您可以通过以下方式实现这一目标:

header('Content-Type: application/xml; charset=utf-8');
echo $output;

答案 2 :(得分:0)

我同意@Marc B的回答。这对我有用。

var s = "276000017812008"; var mask = "###-##-##-##-###-###"; var dashedS = s.WithMask(mask); 没有按照我的意愿做。

我发现必须遍历标记的每个名称并获取XML对象以显示其所有内容很麻烦。

经过更多研究:

simplexml_load_string

使用echo htmlspecialchars(print_r($response, true)); ,您可以将Curl xml响应转换为XHTML。

相关问题