我正在使用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有時可能會有點慢。
乾杯
啊好的,所以你說的是用curl做請求,檢查響應是否正確,然後在返回的數據上使用SimpleXMLElement? – Alias
是的,確切地說。如果將這些類型的錯誤分開很重要,並且'SimpleXML'沒有給你一個好的處理方法,那就分解它。 – Halcyon
謝謝,有道理! – Alias