SimpleXMLElement - HTTP状态代码?

时间:2014-02-14 15:52:18

标签: php steam-condenser

我正在使用PHP Steam Condenser库来获取有关用户的一些Steam详细信息。我已经成功实现了这一切,一切正常。但是我开始注意到蒸汽冷凝器经常抛出一个错误。

发生的事情是,当我使用param调用SteamId类时,库会使用SimpleXMLElement(as can be seen here)生成一个URL并向其发出请求。现在大多数情况下,URL返回XML,因此我的应用程序工作正常,但每次经常Steam返回503 Service Unavailable,导致它失败。

try {
        return @new SimpleXMLElement($url, 0, true);
    } catch (Exception $e) {
        $errorMessage = "XML could not be parsed: " . $e->getMessage();
        if ((float) phpversion() < 5.3) {
            throw new SteamCondenserException($errorMessage, 0);
        } else {
            throw new SteamCondenserException($errorMessage, 0, $e);
        }
    }

在我的原因中,PHP版本是正确的,因此它会抛出底部自定义Exception:

SteamCondenserException
XML could not be parsed: String could not be parsed as XML
/home/user/public_html/acme/vendor/koraktor/steam-condenser/lib/steam/community/XMLData.php (Line 38)

虽然这在技术上是正确的例外,但它不是很有意义,因为请求只是“不可用”,因此无法收集XML。

如何编辑此代码以首先检查请求的状态代码是什么,如果它是302或200(因为它重定向),然后继续检查XML,否则如果它是503,则回复更真实的错误(Steam社区API目前已关闭) - 或其他什么。

我已经谷歌了我的屁股,但看不到任何东西。理想情况下,我希望在同一个请求中完成所有操作,因为Steam有时会有点慢。

干杯

1 个答案:

答案 0 :(得分:2)

请勿使用SimpleXMLElement 同时执行HTTP请求。

使用curl(因为它很快)来获取XML纯文本和SimpleXML来解析它。

通过这种方式,您可以将服务可用性与传输错误(或XML错误)分开。