Intereting Posts
Получите минимальное и максимальное значение в PHP-массиве PHP file_get_contents () и настройки заголовков запросов Заполнение раскрывающегося списка PHP из базы данных MySQL Форма Ajax, представляющая дважды Yii 2 Как предотвратить вставку электронной почты, если она уже существует с определенным идентификатором в laravel? Заполнение списка выпадающего меню после проверки формы отправки Настройка элемента на основе массива Zend_Form и восстановление Действительно ли инъекция SQL возможна путем добавления второго запроса? импортировать пользовательские контакты из Google, Yahoo и AOL в php Какая библиотека лучше всего разбирает файлы Excel в PHP? Facebook PHP throwing exception "(# 803) Некоторые из запрошенных вами псевдонимов не существуют" URL-адрес перезаписи для субдомена C # mimic ассоциативный массив неизвестного номера ключа (как в PHP) Как о неудачных попытках для htaccess защищенных паролем каталогов Php form validate и post работают, но не вместе?

PHP file_get_contents () ведет себя по-разному в браузере

Я пытаюсь загрузить содержимое веб-страницы с помощью PHP. Когда я выдаю команду:

$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2"); 

Он возвращает страницу с сообщением о том, что сервер не работает. Тем не менее, когда я вставляю один и тот же URL-адрес в свой браузер, я получаю ожидаемую страницу.

Кто-нибудь знает, что это вызывает? Передаёт ли file_get_contents любые заголовки, которые отличает его от запроса браузера?

Да, есть различия – браузер, как я сказал бы, отправляет множество дополнительных HTTP-заголовков ; и те, которые отправляются обоими, вероятно, не имеют одинакового значения.

Здесь, после нескольких тестов, кажется, что необходимо передать HTTP-заголовок с именем Accept .

Это можно сделать с помощью третьего параметра file_get_contents , чтобы указать дополнительную информацию о контексте:

 $opts = array('http' => array( 'method' => 'GET', //'user_agent ' => "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2) Gecko/20100301 Ubuntu/9.10 (karmic) Firefox/3.6", 'header' => array( 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*\/*;q=0.8 ' ), ) ); $context = stream_context_create($opts); $f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2", false, $context); echo $f; 

С этим я могу получить HTML-код страницы.

Заметки :

  • Сначала я тестировал передачу User-Agent , но это не кажется необходимым , поэтому соответствующая строка здесь как комментарий
  • Значение используется для заголовка Accept – это тот, который использовался Firefox, когда я просил эту страницу с Firefox перед попыткой с помощью file_get_contents .
    • Некоторые другие значения могут быть в порядке, но я не проводил никаких тестов, чтобы определить, какое значение является необходимым.

Для получения дополнительной информации вы можете посмотреть:

  • file_get_contents
  • stream_context_create
  • Параметры и параметры контекста
  • Параметры контекста HTTP – вот интересная страница, здесь 😉

замените все пробелы на% 20