2013-12-18 4 views
1

Я использовал для обхода веб-сайта для информации с помощью команды file_get_contents в PHP. Хотя теперь каждый раз, когда я пытаюсь идти ломом веб-страницы он возвращает толькоКак использовать file_get_contents в php

<html><head><meta http-equiv="Refresh" content="0; URL=http://website.com/latest.php?ckattempt=1"></head><body></body></html> 

Это код, который я использовал, который используется для работы

$opts = array(
    'http'=>array(
     'method'=>"GET", 
     'header'=>"Accept-language: en\r\n". 
        "Referer: ".$url."/index.php". 
        "Cookie: id=<id token>; auth=<auth token>;" 
    ) 
); 
$context = stream_context_create($opts); 
$html = file_get_contents($url.'/latest.php?ckattempt=0', false, $context); 

Я предполагаю, что это имеет отношение к чему-то имея дело с метатегами обновления, но кто-нибудь знает о любых способах, которыми я мог бы случайно обойти это, чтобы снова отказаться от веб-страницы?

+1

Если это проблема с перенаправлением, вы можете просто использовать 'curl' и следовать ему за перенаправлениями. – Julio

+0

Как вы думаете, вы могли бы добавить пример того, как я мог бы следовать перенаправлениям с помощью cURL? –

+0

На самом деле, теперь, когда я думаю об этом, 'curl' не будет следовать обновлению meta. Возможно, вам придется просто разобрать 'URL =' и следовать за ним вручную. – Julio

ответ

1

Если я правильно истолковал ваш вопрос, ваша проблема связана с тем, что на целевом сервере изменился сайт, который вы обычно загружали. Вместо старой страницы на странице, которую вы загружаете, теперь используется тег meta (называемый meta refresh) для пересылки клиента на другую страницу (до http://website.com/latest.php?ckattempt=1 в этом конкретном примере).

Read about meta refresh here

Что вам нужно сделать (для того, чтобы добраться до данных, которые вы хотите прочитать), вероятно, следовать этой ссылке, а это значит, что вы должны загрузить URL, представленную в этом мета-тег и прочитайте данные оттуда.

CURL может следовать за перенаправлением, но я не совсем уверен, что он будет следовать метатегу, так как это довольно отозванный метод пересылки, и я не помню CURL, поскольку тратил очень много времени на разбор входящего HTML-кода (не вообще на самом деле).

Использование мета обновления не рекомендуется в World Wide Web Consortium (W3C)

Ваш лучший вариант в данном случае является для анализа поступающих данных, выбрать нужную информацию (которая является URL) и загрузите этот URL-адрес.

Вы можете сделать это с помощью регулярного выражения. See this question about which regex to use to detect a link in a string.

абстрактные шаги:

  • Загрузите страницу с помощью общего file_get_contents() вызова
  • Разбираем поступающую страницу и посмотреть, если он содержит meta тег с атрибутом http-equiv, установленным в refresh
  • Если вы нашли этот тег , передайте содержимое, которое вы получили, функции, которая извлекает целевой URL.
  • Используйте file_get_contents() на этом целевом URL-адресе, чтобы получить данные, которые вы нацеливаете на
+0

. Я получаю то, что вы говорите, но это просто странно, потому что URL-адрес, который указан в метатеге - тот же самый URL, который я использую в первую очередь? –

+0

Не знаю много на эту тему, но возможно ли, что сайт использует тег meta refresh для перенаправления людей с явной целью избежать скребков? –

+0

Тогда, возможно, параметр 'ckattempt' используется для определения того, является ли его попыткой что-то. Не могу быть уверенным, но может попытаться поиграть с этим параметром и посмотреть, что произойдет. Вы также можете попробовать, что произойдет, если вы явно измените параметр на ноль (0). – SquareCat

Смежные вопросы