Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > может кто подскажет


Автор: DooZ 25.11.2005, 18:52
суть в следующем
у меня есть 1000 ссылок которые надо проверить на какие-то данные (какие щас это не важно)
все это дело надо проверить через прокси!

вопрос
как отделить ошибку самого сайта от ошибки прокси?
т.е. если не пашет прокся одно дело
если не пашет сайт другое

(проверять сайт по каким то параметрам типа текст какой-то, не подходит т.к. все сайты совершенно разные)

просто если работаешь через LWP он выдает допустим ошибку 404 или 500
и хер его знает чья это ошибка прокси или сервака (страницы что я проверяю)

как быть?

может есть вариант в Socet, IO::Socket ?

желательно примеры


заранее благодарю

Автор: Aleksandor 25.11.2005, 19:12
Надо бы RFC посмотреть, но навскидку могу сказать что прокси не должен сам давать коды ответов HTTP. На то он и прокся что может лишь добавлять от себя некоторые заголовки, но не более того...

Автор: Kiber_rat 26.11.2005, 13:42
Вот тебе для справки коды ответов HTTP:
200 OK
201 Успешная команда POST
202 Запрос принят
203 Запрос GET или HEAD выполнен
204 Запрос выполнен но нет содержимого
300 Ресурс обнаружен в нескольких местах
301 Ресурс удален навсегда
302 Ресурс отсутствует временно
304 Ресурс был изменен
400 Плохой запрос от клиента
401 Неавторизованый запрос
402 Необходима оплата за ресурс
403 Доступ Запрещен
404 Ресурс не найден
405 Метод не применим для данного ресурса
406 Недопустимый тип ресурса
410 Ресурс Недоступен
500 Внутренняя ошибка сервера
501 Метод не выполнен
502 Неисправный шлюз либо перегруз сервера
503 Сервер недоступен/тайм-аут шлюза
504 Вторичный шлюз/тайм-аут сервера

Автор: sharq 27.11.2005, 21:34
DooZ

Ответ можно получить с помощью метода status_line, в котором будет указан код ошибки и краткое пояснение ошибки, в том числе ошибка прокси (например, 500 Invalid argument proxy).

perldoc LWP::UserAgent
perldoc HTTP::Request
perldoc HTTP::Response


smile

Автор: DooZ 30.11.2005, 07:47
вообщем стандартными методами не обойтись как выяснилось
в том числе разбором ответов

вариант походу один (посоветовали добрые люди)
проверять мелкую страницу на наличие строки например (100% существующую страницу) перед каждым коннектом...

=)

Автор: sharq 30.11.2005, 18:11
DooZ вот смотри:

Код

use strict;
use LWP::UserAgent;

sub get_page($) {
 my $url = shift;

 my $PROXY = '...'; # ссылка на массив с прокси-серверами
 while (@$PROXY) {
    my $agent = LWP::UserAgent->new(
        'agent' => '...', # UserAgent
        'cookie_jar' => {},
        'timeout' => 15,
    );
    my $proxy = splice @$PROXY, rand @$PROXY, 1;
    warn "$proxy\n";
    $agent->proxy('http', "http://$proxy/") if $proxy;
        
    my $request = $agent->get($url);
    if ($request->is_success && (my $result = $request->content()) =~ m{</html>}i) {
        warn "Get page\n";
        return $result;
    } else {
        warn "Can't get page: ".$request->status_line."\n";
    }
 }
 return;
}

Это функция получения страницы по указанному url, использующая список прокси.
Если страница не получена, то указывается причина, т.е. статус - номер ошибки и короткое сообщение.

Вот лог работы скрипта:
Код

...
Can't get page: 500 Can't connect to 68.2.130.126:7212 (connect: timeout)
Can't get page: 500 Can't connect to 222.89.166.205:3128 (connect: Invalid argument)
Can't get page: 500 Server closed connection without sending any data back
Get page
...


Как видишь, это все ошибки прокси, которых отверг url. smile
В данном случае не было ошибок сайта, т.к. url - валидный.
Но status_line показывает все ошибки, возникшие при получение страницы, например,
Код

Can't get page: 302 Page removed


smile

Автор: DooZ 1.12.2005, 02:41
ага проходили такое
бывают такие прокси которые пишут
Your IP address is not recognized
CoDeeN CDN Network
типа того
и никакой ошибки... но сайт (страница) не получается...
делайте выводы

Автор: sharq 1.12.2005, 10:39
DooZ
Цитата(DooZ @ 1.12.2005, 03:41)
бывают такие прокси которые пишут
Your IP address is not recognized

так это проблема прокси, а не кода.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)