| 
			| 
					
						| perl6 
								Помогающий    Offline | 
								|  | «  : 31-05-2017 21:09 »  |  | 
 
 Доброго времени суток. Уже несколько дней бьюсь над такой вот проблемой. А именно, как разрешить выборочный редирект.Т.е., парсинг сайта временами заканчивается редиректом на левые страницы, мне ясное дело незачем туда ходить, но, вот нужный редирект делать приходится.
 Пока, как довольно геморрное и громоздкое решение делаю общий запрет на редирект через $ua->max_redirect(0);
 и вручную обрабатываю редирект через регулярку, если в урле редиректа есть нужные мне данные, то перехожу. Но, проблема в том, что редиектов много, один может породить другой. Нет ли возможности средствами LWP, например, объявить в начале для каких запросов я разрешаю редирект (что то типа $ua->redirect_ok(перечислить разрешенные), а остальные редиректы бы отбрасывались.
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #1 : 31-05-2017 22:22 »  |  | 
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 31-05-2017 22:24 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #2 : 31-05-2017 23:00 »  |  | 
 
 А что такое выборочный редирект я так и не понял?
 Ведь в ответе есть куда редиректить?
 Поэтому и нужно самому разбираться куда тебя посылают
 
 
 Не знаю как в перле
 но  в php curl
 CURLOPT_FOLLOWLOCATION
 CURLOPT_MAXREDIRS
 
 Но я думаю, что вас это не интересует
 А интересует именно ответ сервера
 
 Ну так сервер может ответить различными редиректами - смотрите ответы редиректов (301, 302, 307 ) как часто используемые
 
 Поэтому
 0 exec
 1 анализ кода ответа
 2 анализ адреса редиректа (а здесь уже можно поступать как угодно)
 3. Подсчет количества редиректов и такое бывает ведь не зря CURLOPT_MAXREDIRS
 4 goto 0
 
 
 
 
 
 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #3 : 01-06-2017 07:29 »  |  | 
 
 В перле так же можно использовать curl. В перл вообще богатый инструментарий.
 С LWP есть обработчики, включая response_redirect. Возможность решать самому, чего еще нужно...
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| perl6 
								Помогающий    Offline | 
								|  | « Ответ #4 : 01-06-2017 18:49 »  |  | 
 
 Вчера тоже этот раздел смотрел, только с англ. беда. Непонятно многое. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| perl6 
								Помогающий    Offline | 
								|  | « Ответ #5 : 01-06-2017 18:50 »  |  | 
 
 А что такое выборочный редирект я так и не понял? Это когда мы выбираем сами, по каким редиректам ходить (парсим header location). Как я это реализовал в программе, через костыль. В общей части кода запретил редиректы (чтобы по всем подряд не переходить), а в нужных местах в ручную обрабатываю его. Но, это костыль, хочется гибкого решения средствами lwp |  
						| 
								|  |  
								| « Последнее редактирование: 01-06-2017 18:53 от perl6 » |  Записан | 
 |  |  | 
	| 
			| 
					
						| perl6 
								Помогающий    Offline | 
								|  | « Ответ #6 : 01-06-2017 18:52 »  |  | 
 
 В перле так же можно использовать curl. В перл вообще богатый инструментарий.
 С LWP есть обработчики, включая response_redirect. Возможность решать самому, чего еще нужно...
 
 curl нам не нужен, а вот гибкий обработчик, а что это вообще за вариант? Что-то не найду примера с использованием. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #7 : 01-06-2017 20:01 »  |  | 
 
 Не знает система, что редиректить, а что нет.почему вы считаете, что єто костыль?
 Мало того, я 100% уверен, что внутренняя реализация отслеживания редиректов так и построена.
 
 Я реально не знаю, что такое LWP
 Причем здесь нужен или не нужен curl, который был приведен как пример.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| perl6 
								Помогающий    Offline | 
								|  | « Ответ #8 : 01-06-2017 22:36 »  |  | 
 
 Не знает система, что редиректить, а что нет. Вот я о том и речь веду. Неплохо было бы разрешить редиректы только для определенных запросов, а для остальных, по умолчанию, запретить. почему вы считаете, что єто костыль?. Смотрите сами. Вот я в начале программы, так сказать, глобально отключаю редиректы совсем. Незачем мне ходить по ним всегда. Но, в процессе парсинга, для определенных запросов, допустим, $req1, $req5, $req7 редиректы нужны. Приходится в ручную городить обработку, вот было бы здорово, заранее, определить, для каких запросов и/или доменов разрешить редиректы. Мало того, я 100% уверен, что внутренняя реализация отслеживания редиректов так и построена. Пока только нарыл то, что можно определить макс. количество редиректов или их вообще запретить. Я реально не знаю, что такое LWP Это перловый www броузер, позволяет ходить по сайтам, делать запросы, поддерживает куки. Короче, библиотека для работы с www (ине только) сетью. Причем здесь нужен или не нужен curl, который был приведен как пример.
 Да, я понял, спасибо за пример. Для его использования в перле его надо скомпилировать сначала, а хочется обойтись средствами перла. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #9 : 01-06-2017 22:37 »  |  | 
 
 Вчера тоже этот раздел смотрел, только с англ. беда. Непонятно многое.Да, беда. Не может человек, не читающий документацию, писать программы. #!/usr/bin/perl
 use 5.010;
 use strict;
 use warnings;
 
 use LWP::UserAgent;
 
 my $ua = LWP::UserAgent->new;
 
 $ua->add_handler(response_header => sub {
 my ($response, $ua) = @_;
 
 say 'Received redirect to location: ', $response->header('location');
 $response->code(400);
 return;
 }, m_code => [301, 302]);
 
 $ua->add_handler(response_done => sub {
 my ($response, $ua) = @_;
 
 say 'Response done: ', $response->code;
 return;
 });
 
 $ua->add_handler(response_redirect => sub {
 my ($response, $ua) = @_;
 
 return unless $response->is_redirect;
 say 'Performs redirection to ', $response->header('location');
 return;
 });
 
 say "==== request with redirect ====";
 $ua->get('http://yandex.ru/');
 
 say "==== request without redirect ====";
 $ua->get('https://yandex.ru/');
 Дальше сам. Читай еще: http://search.cpan.org/~ether/HTTP-Message-6.11/lib/HTTP/Config.pm#Matching |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #10 : 01-06-2017 22:39 »  |  | 
 
 Я реально не знаю, что такое LWP
 LWP — libwww-perl Библиотека libwww очень старая — 1992-й год. Сделано под первые браузеры. Позже растиражирована под различные нужны, включая реализацию для перл. |  
						| 
								|  |  
								| « Последнее редактирование: 02-06-2017 07:45 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #11 :  02-06-2017 08:51 »   |  | 
 
 Я реально не знаю, что такое LWP
 LWP — libwww-perl Библиотека libwww очень старая — 1992-й год. Сделано под первые браузеры. Позже растиражирована под различные нужны, включая реализацию для перл. Я писал, что не знаю - не пользовался, не видел. А прочитать заголовок доки - это я умею   Но я также понимаю принципы, как это работает, или представляю как это должно работать, потмоу и привел пример, из тог что знаю. Никто не застваляет компилировать curl. Принцип один Открыть порт, сделать запрос Разобрать ответ Все!!!  А дальше.. назови хоть груздем, лишь бы грибом был |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| perl6 
								Помогающий    Offline | 
								|  | « Ответ #12 : 02-06-2017 14:30 »  |  | 
 
 Да, беда. Не может человек, не читающий документацию, писать программы.
 Да, а что делать. Никто не переводит документацию нормально. Никому не надо. А в школе нас тех. англ. не учили. Спасибо за пример, поковыряю вечерком. |  
						| 
								|  |  
								| « Последнее редактирование: 02-06-2017 14:37 от perl6 » |  Записан | 
 |  |  | 
	| 
			| 
					
						| perl6 
								Помогающий    Offline | 
								|  | « Ответ #13 : 02-06-2017 14:32 »  |  | 
 
 LWP — libwww-perlБиблиотека libwww очень старая — 1992-й год. Сделано под первые браузеры. Позже растиражирована под различные нужны, включая реализацию для перл.
 
 Да я бы не сказал, что прям настолько устарела, последнее обновление датировано 3 апрелем 2017 года. Некоторые библиотеки уже года 3 не обновляются. Кстати, какой модуль вы бы посоветовали, актуальный на сегодня? |  
						| 
								|  |  
								| « Последнее редактирование: 02-06-2017 14:37 от perl6 » |  Записан | 
 |  |  | 
	| 
			| 
					
						| perl6 
								Помогающий    Offline | 
								|  | « Ответ #14 : 02-06-2017 17:09 »  |  | 
 
 Вроде более менее логика понятна.P.S. Интересует, как регуляркой задать определенные соотв. в "location" урле. Можно, конечно по доменам разрешить, но способ корявый, ибо домены все собирать не айс. А вот регуляркой задать соответствие не получается почему-то.
 Я про m_path_match, ищущей в ссылке, с которой редиректит, а не в ссылке, куда редиректит.
 Иными словами, ссылка site1.ru, которая отправляет редиректом на site2.ru, вот мне в site2.ru и надо искать соотв. Если site2 содержит опр. слова, то переходить.
 Может m_response_attr__$key поможет. Непонятно, что это за поле такое m_response_attr__
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 02-06-2017 17:57 от perl6 » |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #15 : 02-06-2017 22:05 »  |  | 
 
 Да, а что делать. Никто не переводит документацию нормально. Никому не надо. А в школе нас тех. англ. не учили. Спасибо за пример, поковыряю вечерком.
 Отговорки. Я немецкий учил. Правда, нихрена не помню. В общем, если что-то нужно, научиться можно без школ и университетов. Т.к. ты пишешь синхронный код, порекомендую curl. Он также может делать параллельные запросы: даешь ему N заданий и встаешь в ожидание первого завершенного. Но это не параллельный процесс, его нельзя с активными запросами надолго лишать управления. Но можно и по одному запросу гонять. С другой стороны, если ты привык к LWP, то зачем менять. Только если не подходит как инструмент. Насчет логики: response_redirect используется не при редиректах, а для имитации редиректа. ссылка site1.ru, которая отправляет редиректом на site2.ru, вот мне в site2.ru и надо искать соотв. Если site2 содержит опр. слова, то переходить. Это расходится с изначальным описанием. Определись с логикой. |  
						| 
								|  |  
								| « Последнее редактирование: 02-06-2017 22:17 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| perl6 
								Помогающий    Offline | 
								|  | « Ответ #16 : 03-06-2017 21:54 »  |  | 
 
 Т.к. ты пишешь синхронный код, порекомендую curl. Он также может делать параллельные запросы: даешь ему N заданий и встаешь в ожидание первого завершенного. Но это не параллельный процесс, его нельзя с активными запросами надолго лишать управления. Но можно и по одному запросу гонять.С другой стороны, если ты привык к LWP, то зачем менять. Только если не подходит как инструмент.
 Вот, я тоже подумал. Курл для этого слишком громоздкий, LWP прекрасно справляется. Это расходится с изначальным описанием. Определись с логикой.
 Я просто не умею выражать свои мысли, это да. Изначально неправильно истолковал. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |