2014-02-14 3 views
1

Я работаю с библиотекой PHP Steam Condenser, чтобы получить некоторые сведения о пользователе Steam. Я успешно реализовал это, и все работает. Однако я начал замечать, что ошибка возникает так часто, от Steam Condenser.SimpleXMLElement - код состояния HTTP?

Что происходит, когда я вызываю класс SteamId с параметром, библиотека генерирует URL-адрес и делает запрос к нему, используя SimpleXMLElement (as can be seen here). В большинстве случаев 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) 

Хотя это технически правильное исключение, это не очень значимая, так как запрос был просто «Unavailable» и, следовательно, не смог собрать XML.

Как я могу изменить этот код, чтобы сначала проверить, что представляет собой код состояния запроса, если это 302 или 200 (поскольку он перенаправляет), а затем перейдите к проверке XML, иначе, если это 503, ответьте с более подлинной ошибкой (API сообщества Steam в настоящее время недоступен) - или что-то в этом роде.

Я отключил свою задницу, но ничего не вижу. В идеале мне бы хотелось, чтобы все было сделано по одному и тому же запросу, поскольку Steam иногда может быть немного медленнее.

Приветствия

ответ

2

Не используйте SimpleXMLElement для также сделать запрос HTTP.

Используйте curl (потому что это быстро), чтобы получить XML-текст и SimpleXML, чтобы проанализировать его.

Таким образом, вы можете отделить доступность услуг от ошибок передачи (или ошибок XML).

+0

Ах, хорошо, так что вы говорите, чтобы сделать запрос с завиванием, проверить правильность ответа, а затем просто использовать SimpleXMLElement для данных, которые вы возвращаете? – Alias

+0

Да, точно. Если важно отделить эти типы ошибок, а 'SimpleXML' не дает вам хорошей справки, просто разделите его. – Halcyon

+0

Спасибо, имеет смысл! – Alias

Смежные вопросы