2014-02-14 63 views
1

我正在使用PHP蒸汽冷凝器库,以获取有关用户的一些Steam细节。我已经成功实现了这一切,一切都在工作。然而,我开始注意到蒸汽冷凝器每隔一段时间就会抛出一个错误。SimpleXMLElement - HTTP状态码?

发生了什么事情是,当我用param调用SteamId类时,库会使用SimpleXMLElement(as can be seen here)生成一个URL并向其发出请求。现在大多数情况下,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,则回应与更真正的错误(Steam社区API目前正在下降) - 或者什么。

我已经Google'd我的屁股关闭,但看不到任何东西。理想情况下,我希望这一切都可以在同一个请求中完成,因为Steam有时可能会有点慢。

干杯

回答

2

不要使用SimpleXMLElement做HTTP请求。

使用curl(因为速度很快)可以读取XML纯文本,并使用SimpleXML来解析它。

这样就可以将服务可用性与传输错误(或XML错误)分开。

+0

啊好的,所以你说的是用curl做请求,检查响应是否正确,然后在返回的数据上使用SimpleXMLElement? – Alias

+0

是的,确切地说。如果将这些类型的错误分开很重要,并且'SimpleXML'没有给你一个好的处理方法,那就分解它。 – Halcyon

+0

谢谢,有道理! – Alias