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

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

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

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

У кого-либо есть какая-либо идея, что вызывает это? file_get_contents передает какие-либо заголовки, которые дифференцируют его от запроса браузера?

6
задан Mike B 30 March 2010 в 20:31
поделиться

2 ответа

Да, есть различия - браузер, как правило, отправляет множество дополнительных 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 .
    • Некоторые другие значения могут подойти, но я не проводил никаких тестов, чтобы определить, какое значение является обязательным.


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

16
ответ дан 8 December 2019 в 18:34
поделиться

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

-3
ответ дан 8 December 2019 в 18:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: