我正在使用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有时会有点慢。
干杯
答案 0 :(得分:2)
请勿使用SimpleXMLElement
同时执行HTTP请求。
使用curl
(因为它很快)来获取XML纯文本和SimpleXML
来解析它。
通过这种方式,您可以将服务可用性与传输错误(或XML错误)分开。