【问题标题】:How to force XML response using PHP CURL如何使用 PHP CURL 强制 XML 响应
【发布时间】:2013-10-25 05:23:18
【问题描述】:

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

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

帮助!

CURL 请求/响应页面

                        <?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

【问题讨论】:

  • 它返回正常。不要在浏览器中看,看页面的source(渲染为html会隐藏所有标签,换行等)
  • 你说得对,我可以在页面源码中看到XML格式。如何在屏幕上将响应显示为 XML 树?没有javascript有没有简单的方法来做到这一点?
  • 有谁知道我如何将屏幕上的 XML 显示为 XML 树,就像您在 Web 浏览器中打开 XML 文档一样?

标签: php xml curl


【解决方案1】:

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

尝试“查看源代码”,你会看到你的 xml,或者做

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

【讨论】:

  • 感谢一百万次和 +1。我花了一整天的时间来解决这个问题。
【解决方案2】:

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

你可以这样做:

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

【讨论】:

    【解决方案3】:

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

    simplexml_load_string 没有做我想做的事。

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

    经过更多研究:

    echo htmlspecialchars(print_r($response, true));
    

    使用htmlspecialchars,您可以将您的 Curl xml 响应转换为 XHTML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      相关资源
      最近更新 更多