Forum Webscript.Ru

Программирование => PHP => Тема начата: vovanabok от 26 Ноября 2008, 22:20:21

Название: Как узнать о редиректе?
Отправлено: vovanabok от 26 Ноября 2008, 22:20:21
Есть пхп-скрипт "S", который грабит контент некой хтмл-страницы "А". У которой, соответственно, есть урл-адрес "А-урл".

Но вот, переходя по адресу "А-урл", для скрипта открывается страница "Б" вследствии действия Коварного_редиректа, некогда установленного на странице "А".

Вопрос: как в пхп-скрипте "S" узнать, имел ли место Коварный_редирект и что скрипт грабит на самом деле совершенно другую, совершенно ни в чем невиноватую страницу "Б"?

Постусловие: контент страницы "А" разработчику неизвестен.
Название: Как узнать о редиректе?
Отправлено: APL от 26 Ноября 2008, 23:12:21
это не редирект... скрипт, как и браузер, по http-запросу получает то, что выдает сервер, и браузер, если там стоит редирект перенаправляет на другую стр, а скрипт получит все нормально...

или вы под редиректом что-то другое имеете в виду...

или уж напишите что по вашему такое "для скрипта открывается страница "Б""?
"для скрипта" ничего не открывается :)
Название: Как узнать о редиректе?
Отправлено: vovanabok от 27 Ноября 2008, 00:03:41
отслеживая отображаемые результаты граббинга очереди страниц, я увидел, что вместо ожидаемого [title] страницы "А" в окошке броузера отображается [title] страницы "Б", на которую, как я понял, и произошел редирект.

что еще могу сказать: урл желаемой страницы "А" имел примерно такой вид:
http://какой.то.урл/component/option,com_banners/task,click/bid,6/news/article/491/1/article/497/1/
подозрительный конечно урл. но не ставить же резалку, которая будет отметать все урлы, что имеют строку "banner" или "click".
Название: Как узнать о редиректе?
Отправлено: CGVictor от 27 Ноября 2008, 00:15:40
vovanabok
Цитировать
vovanabok:
по адресу "А-урл", для скрипта открывается страница "Б" вследствии

Контент забирается чем? Способ?
Ну а вообще - curl.

* адрес здесь ни при чем.
Название: Как узнать о редиректе?
Отправлено: vovanabok от 27 Ноября 2008, 12:41:03
Граблю таким способом:

Цитировать
function get_url_content($url){
   $c = \'\';
   $fo = @fopen($url, "r");
   while (!feof($fo)) {
      $c .= fread($fo, 8192);
   }
   fclose($fo);
   return $c;
}


2 CGVictor: curl нужно ставить, как я понял. скрипт на не моем хостинге работает...

2 APL: чтоб ответить на вопрос, продолжаю тестирование...
Название: Как узнать о редиректе?
Отправлено: APL от 27 Ноября 2008, 13:40:00
Поправьте, если ошибаюсь....

Почитал описание fopen() и fread()... не вижу там никакого парсинга html :) т.е. редирект возможен только со стороны web-сервера и/или скриптов отвечающих за выдачу html, а это уже не лечится... может там проверка referrer\'а или типа того :)

А если он стоит в html типа
, то функция и должна вернуть такую html-ку и ей этот рефреш уже по барабану...
Название: Как узнать о редиректе?
Отправлено: CGVictor от 27 Ноября 2008, 23:45:07
vovanabok
Общий постулат: если удаленный сервер действительно что-то куда-то редиректит, то делает он это только по одному условию - по несовпадению параметров запроса (user agent и прочая). Других отличий для него как бы и нет.
Лечится отправкой полного запроса (либо через curl, либо fsockopen).

Либо это делает не он, а кривые руки где-то между (что мы, впрочем, не узнаем). В случае кривых рук тогда рекомендую попробовать не fread/feof, а просто [p]file_get_contents[/p].

Curl вообще обычно на хостах есть, довольно стандартная-устоявшаяся штука. Если нет - можно и хостера пнуть, по той же причине.
Название: Как узнать о редиректе?
Отправлено: hanslinger от 28 Ноября 2008, 10:21:46
Самое смешное то, что здесь, скорее всего, все наоборот, ребята )
Название: Как узнать о редиректе?
Отправлено: CGVictor от 30 Ноября 2008, 13:16:07
[off]hanslinger
Т.е. редиректа нет? Как и ложки? :)[/off]
Название: Как узнать о редиректе?
Отправлено: hanslinger от 01 Декабря 2008, 10:49:36
Он есть, но для браузера нашего друга. А скрипту на него положить. Вот и не совпадают заголовки, незадача.