Загрузите содержимое URL-адреса в PHP, даже если оно возвращает 404

Я хочу загрузить содержимое URL-адреса с помощью PHP, даже если код ответа HTTP равен 404. file_get_contents будет ошибкой, и я не смог найти ответ с помощью Google. Как я могу это сделать?

По умолчанию file_get_contents возвращает только HTTP-ответы.

С curl вы получаете заголовки и контент отдельно.

Начиная с PHP 5.0, вы также можете указать контекст для file_get_contents , что позволяет вам делать это, не полагаясь на url (см. Ответ Гордона).

Вы должны настроить оболочку потока для игнорирования ошибок:

ignore_errors boolean Извлечение содержимого даже в коды состояния отказа. По умолчанию FALSE

Другими словами, do

 echo file_get_contents( 'http://stackoverflow.com/foo/bar', false, stream_context_create( array( 'http' => array( 'ignore_errors' => true ) ) ) ); 

и вы получите страницу 404.

Если вы хотите, чтобы это было по умолчанию для HTTP-потоков, используйте

 stream_context_set_default( array('http' => array( 'ignore_errors' => true) ) ); 

Любые вызовы, использующие оболочку потока HTTP, будут использовать эти параметры, например, вы можете просто сделать

 echo file_get_contents('http://stackoverflow.com/foo/bar'); 

Если вы также хотите получить заголовок ответа , просто выполните

 print_r($http_response_header); 

после вызова. Переменная (повторно) заполняется после каждого вызова с помощью обертки http-потока.

Вместо этого используйте cURL . Это позволяет значительно усилить контроль и позволит вам прочитать любой полученный контент и код состояния.