Forum Webscript.Ru
Программирование => PHP => Тема начата: vovanabok от 26 Ноября 2008, 22:20:21
-
Есть пхп-скрипт "S", который грабит контент некой хтмл-страницы "А". У которой, соответственно, есть урл-адрес "А-урл".
Но вот, переходя по адресу "А-урл", для скрипта открывается страница "Б" вследствии действия Коварного_редиректа, некогда установленного на странице "А".
Вопрос: как в пхп-скрипте "S" узнать, имел ли место Коварный_редирект и что скрипт грабит на самом деле совершенно другую, совершенно ни в чем невиноватую страницу "Б"?
Постусловие: контент страницы "А" разработчику неизвестен.
-
это не редирект... скрипт, как и браузер, по http-запросу получает то, что выдает сервер, и браузер, если там стоит редирект перенаправляет на другую стр, а скрипт получит все нормально...
или вы под редиректом что-то другое имеете в виду...
или уж напишите что по вашему такое "для скрипта открывается страница "Б""?
"для скрипта" ничего не открывается :)
-
отслеживая отображаемые результаты граббинга очереди страниц, я увидел, что вместо ожидаемого [title] страницы "А" в окошке броузера отображается [title] страницы "Б", на которую, как я понял, и произошел редирект.
что еще могу сказать: урл желаемой страницы "А" имел примерно такой вид:
http://какой.то.урл/component/option,com_banners/task,click/bid,6/news/article/491/1/article/497/1/
подозрительный конечно урл. но не ставить же резалку, которая будет отметать все урлы, что имеют строку "banner" или "click".
-
vovanabok
vovanabok:
по адресу "А-урл", для скрипта открывается страница "Б" вследствии
Контент забирается чем? Способ?
Ну а вообще - curl.
* адрес здесь ни при чем.
-
Граблю таким способом:
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: чтоб ответить на вопрос, продолжаю тестирование...
-
Поправьте, если ошибаюсь....
Почитал описание fopen() и fread()... не вижу там никакого парсинга html :) т.е. редирект возможен только со стороны web-сервера и/или скриптов отвечающих за выдачу html, а это уже не лечится... может там проверка referrer\'а или типа того :)
А если он стоит в html типа
, то функция и должна вернуть такую html-ку и ей этот рефреш уже по барабану...
-
vovanabok
Общий постулат: если удаленный сервер действительно что-то куда-то редиректит, то делает он это только по одному условию - по несовпадению параметров запроса (user agent и прочая). Других отличий для него как бы и нет.
Лечится отправкой полного запроса (либо через curl, либо fsockopen).
Либо это делает не он, а кривые руки где-то между (что мы, впрочем, не узнаем). В случае кривых рук тогда рекомендую попробовать не fread/feof, а просто [p]file_get_contents[/p].
Curl вообще обычно на хостах есть, довольно стандартная-устоявшаяся штука. Если нет - можно и хостера пнуть, по той же причине.
-
Самое смешное то, что здесь, скорее всего, все наоборот, ребята )
-
[off]hanslinger
Т.е. редиректа нет? Как и ложки? :)[/off]
-
Он есть, но для браузера нашего друга. А скрипту на него положить. Вот и не совпадают заголовки, незадача.