我正在与PHP蒸汽冷凝器库合作,以获取一些有关用户的蒸汽细节。我已经成功地实现了这一点,一切都很正常。然而,我开始注意到一个错误经常被抛出,从蒸汽冷凝器。
所发生的情况是,当我使用param调用SteamId类时,库将生成一个URL并使用SimpleXMLElement (从这里可以看到)向其发出请求。现在,大多数情况下,URL返回XML,因此我的应用程序运行良好,但是,蒸汽经常会将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版本是正确的,因此它抛出了底层自定义异常:
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,用一个更真实的错误(蒸汽Community当前关闭)来响应--或者其他什么。
我已经把我的屁股搜索掉了,但什么也看不见。理想情况下,我希望在相同的要求下完成这一切,因为蒸汽有时会有点慢。
干杯
发布于 2014-02-14 15:53:56
不要使用SimpleXMLElement也执行HTTP请求。
使用curl (因为它速度快)获取XML纯文本,使用SimpleXML解析它。
这样,您就可以将服务可用性与传输错误(或XML错误)分开。
https://stackoverflow.com/questions/21783722
复制相似问题