Я пытаюсь загрузить содержимое веб-страницы с помощью 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
замените все пробелы на% 20