Forum Webscript.Ru

Программирование => Perl => Тема начата: _apple_ от 22 Марта 2005, 21:15:31

Название: Определить Redirect
Отправлено: _apple_ от 22 Марта 2005, 21:15:31
Привет,
вот над такой проблемой сижу.

обращаясь к странице через LWP::UserAgent, хочу узнать, был ли редирект. т.е. я знаю что он был, но как мне программно об этом узнать?

туда, куда послал запрос - status_line = 200OK, но на самом деле отображается совсем другая страница, на которую был с этой первой редирект.

-- begin first.html --
...

...
-- end first.html --

как на Perl это детектить и можно ли это вообще сделать?
Название: Определить Redirect
Отправлено: 2NetFly от 22 Марта 2005, 23:10:53
$ua = LWP::UserAgent->new( %options );

KEY                     DEFAULT
-----------             --------------------
agent                   "libwww-perl/#.##"
...
requests_redirectable   [\'GET\', \'HEAD\']
Название: Определить Redirect
Отправлено: 2NetFly от 22 Марта 2005, 23:12:02
Хотя, раньше он только по коду редиректил.
Название: Определить Redirect
Отправлено: _apple_ от 22 Марта 2005, 23:44:43
и что это? по какому коду?
header(\'Location: ...\'); ловит и так отлично.

а вот как реально отловить такие вещи?



или
JavaScript
document.location = "http://foo.home";

можно примерчик или идею?
Название: Определить Redirect
Отправлено: 2NetFly от 22 Марта 2005, 23:53:13
Если редирект выполняется отправкой соответствующего кода, LWP может это отловить и проследовать по URL, переданному в Location. Другие типы редиректа LWP не отлавливает. Определить редирект, выполняемый посредством мета-тэгов, довольно просто, а вот с JS -- очень сложно (читай невозможно).
Название: Определить Redirect
Отправлено: _apple_ от 23 Марта 2005, 01:13:55
Ясно, а как получить массив всех пройденных хостов при редиректе?

допустим их три, 1 ссылаеться на 2-ой, а второй на 3-ий
все через Location.
Название: Определить Redirect
Отправлено: _apple_ от 23 Марта 2005, 02:02:07
$ua = LWP::UserAgent->new;
$request = HTTP::Request->new(\'GET\', \'http://foo.com\');
$response = $ua->request($request);

// как вот отсюда выдрать массив URL?
$requests = $response->previous;