Я использую следующий PHP:
$xml = simplexml_load_file($request_url) or die("url not loading");
Я использую:
$status = $xml->Response->Status->code;
Проверить статус ответа. 200 bening все в порядке, продолжайте.
Однако, если я получаю ошибку с ошибкой доступа 403, как я могу ее поймать на PHP, чтобы я мог вернуть удобное для пользователя предупреждение?
Чтобы получить код ответа HTTP от вызова simplexml_load_file()
, единственный способ, которым я знаю, – использовать малоизвестный $http_response_header
. Эта переменная автоматически создается как массив, содержащий каждый заголовок ответа отдельно, каждый раз, когда вы делаете HTTP-запрос через HTTP-обертку. Другими словами, каждый раз, когда вы используете simplexml_load_file()
или file_get_contents()
с URL-адресом, который начинается с «http: //»,
Вы можете проверить его содержимое с помощью print_r()
например
$xml = @simplexml_load_file($request_url); print_r($http_response_header);
В вашем случае, однако, вы можете захотеть получить XML отдельно с помощью file_get_contents()
затем проверьте, есть ли у вас ответ 4xx, а если нет, передайте тело в simplexml_load_string()
. Например:
$response = @file_get_contents($request_url); if (preg_match('#^HTTP/... 4..#', $http_response_header[0])) { // received a 4xx response } $xml = simplexml_load_string($response);
Вам нужно будет использовать что-то вроде модуля cURL или модуля HTTP для извлечения файла, а затем использовать предоставленные ими функции для обнаружения ошибки HTTP, а затем передать строку из них в simplexml_load_string .