perl: LWP и Crypt::SSLeay, а в ответ 403 Forbidden
скрипт, о котором вчера шла речь, оказался не совсем рабочим
(http://forum.codenet.ru/showthread.php?t=55662)
вот код:
#use strict;
use warnings;
#----частьА----
use LWP::Simple;
#----частьА----
my $outFile = "list.txt";
my $tempFile = "tmp.txt";
my $url = "http://proxy_list/";
#код html-страницы со списком сохраняется на диске;
open(FSOURCE, "> $tempFile");
#----частьА----
my $content = get $url;
#----частьА----
print(FSOURCE "$content");
close(FSOURCE);
#итоговый файл;
open(FHANDLE, ">> $outFile");
#опять открываем временный файл для его обработки;
open(FIN, "$tempFile");
#поточное вычленение адресов;
while (<FIN>) {
if ($_ =~ />([0-9a-zA-Z]+(\.[0-9a-zA-Z]+)+)<\// ) {
#запись в выходной файл в формате ".домN. ... .дом2.дом1" // ".report.proxy.org"
print (FHANDLE ".$1\n");
};
};
close(FIN);
close(FHANDLE);
скрипт работает пока не попадает в "промышленную эксплуатацию"
сервер, с которого надо "сливать" исходный список - http://proxy.org/.
почитав описание и примеры, выяснилось, что LWP::Simple не работает с хттпс. поэтому подключаем возможность их обработки. меняем в скрипте "частьА" на следующее:
my $browser = LWP::UserAgent->new;
my $content = $browser->get($url);
#как и указано в теме пакет Crypt::SSLeay установлен
и вроде бы всё работает, пока дело не доходит до нужного сайта.
то есть все остальные хттпс сайты(гмаил, пайпал) указанным способом получаются, а на запрос proxy.org возвращает 403-ю ошибку.
на перлдоке про такую проблему вообще не упоминается. может кто сталкивался? как обойти эту авторизацию?
а конкретно скажи, какой URL дёргается?
а конкретно скажи, какой URL дёргается?
вот же :) :
любой браузер нормального этот сайт открывает, а вот через перл - форбидден в ответ.
пытался посмотреть чего там браузеры отсылают, снифернув канал - так он, гад, шифрованный :D
если встает вопрос что урл не хттпс, то это мне тоже не понятно..
чтобы получить этот адрес, авторизовываться не надо; чтобы зайти на некоторые другие страницы - придется залогиниться (используя браузер).
через перл сначала пытался получить его через LWP::Simple - в ответ приходило, что нету пакета Crypt::SSLeay и поэтому соедениться нельзя,
когда я этот пакет поставил - в ответ приходит 403-я ошибка
еще раз замечу, что с другими хттпс-сайтами проблем нет.
use strict;
use warnings;
use LWP;
&main();
sub main {
my $agent = LWP::UserAgent->new();
$agent->agent('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008120121 Firefox/3.0.5');
my $request = HTTP::Request->new(GET => 'http://proxy.org/proxies_sorted.shtml' );
my $response = $agent->request($request);
if ($response->is_success) {
print $response->content;
} else {
$response->status_line;
}
};
делал то же самое, что предложил ReDrum, но без выделения в main() - не работало, выдавало 403
по примеру ReDrum'a - висит и не отвечает...ждал около 30 мин, но и ошибок никаких не показывает
может LWP с моим днк несовместим? :D
perl у меня 5.8.8 от activestate;
сейчас попробую обновить до 10-ки
делал то же самое, что предложил ReDrum, но без выделения в main() - не работало, выдавало 403
по примеру ReDrum'a - висит и не отвечает...ждал около 30 мин, но и ошибок никаких не показывает
может LWP с моим днк несовместим? :D
perl у меня 5.8.8 от activestate;
сейчас попробую обновить до 10-ки
Все равно какая версия перла стоит.
30 мин оно не может висеть в консоли, По умолчанию в конструкторе LWP::UserAgent стоит 180 секунд,
Хотя, если смотришь на виндовой машине и включена каккая нибудь приблуда аля какой нить файрвол, которая блокирует сетевую активность "неизвестного" ))) приложения - это более менее правдоподобное объяснение
Можно посмотреть что происходит добавив такие строки
my $response = $agent->request($request);
use Data::Dumper;
print Dumper($response);
if(....) ...
<li><a>hidelive.com</span> (PHProxy 0.5)</li>
<li><a>surfeverywhere.com</span> (PHProxy 0.5)</li>
<li><a>ownd.info</span> (Glype)</li>
<li><a>prx2.info</span> (PHProxy 0.5)</li>
<li><a>cleansheet.info</span> (PHProxy 0.5)</li>
<li><a>netbitch.info</span> (Glype)</li>
<li><a>doyouweb.info</span> (Glype)</li>
<li><a>friendsterunblock.com</span> (PHProxy 0.5)</li>
<li><a>internettoy.info</span> (Glype)</li>
<li><a>yourproxy2u.com</span> (PHProxy 0.5)</li>
<li><a>abeo.info</span> (Glype)</li>
<li><a>proxyug.com</span> (PHProxy 0.5)</li>
<li><a>tryeuro.info</span> (Glype)</li>
<li><a>lemonblue.info</span> (Glype)</li>
<li><a>grapebox.info</span> (Glype)</li>
<li><a>10v.pl</span> (PHProxy 0.5)</li>
<li><a>whitepillow.info</span> (Glype)</li>
<li><a>apricotbox.info</span> (Glype)</li>
<li><a>unblockmyspace2.info</span> (Glype)</li>
<li><a>cherrybox.info</span> (Glype)</li>
<li><a>roxzo.info</span> (Glype)</li>
<li><a>es175.info</span> (Glype)</li>
<li><a>redonestar.info</span> (Glype)</li>
<li><a>access2myspace.com</span> (PHProxy 0.5)</li>
<li><a>clearstatus.info</span> (Glype)</li>
<li><a>inet-media.nl</span> (Zelune)</li>
<li><a>proxybaby.info</span> (Glype)</li>
<li><a>playtimeonschool.info</span> (Glype)</li>
<li><a>proxy-sites.eu</span> (Glype)</li>
<li><a>bbcproxy.info</span> (PHProxy 0.5)</li>
<li><a>b
там страничка весит 700 к, и отдаётся ну мегамедленно. поставил, ушел кушать. вот вернулся, уже готово )
use strict;
use LWP::UserAgent;
my $agent = LWP::UserAgent->new();
$agent->agent('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008120121 Firefox/3.0.5');
$agent->timeout(10);
$agent->env_proxy();
my $response = $agent->get('https://proxy.org/proxies_sorted.shtml');
if ($response->is_success) {
print $response->content;
} else {
print $response->status_line;
}
upd2: посмотри сорец lwp-download (по идее в /usr/bin), ему пофигу откуда какой файл качать =)
все действительно работает. спасибо всем!
да я на работе через проксю подключен, и вот пару дней назад когда начались, там же еще и файрвол внутренний зачем то врубили.
попробовал дома тот же скрипт - все отлично работает.
сейчас вот опять на работе попробовал, предварительно отключив фаервол, - работает :)
после совета ReDrum'a решил перепроверить всё это дело; помогло ))
за что отдельное спасибо)