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


Автор: djusha 28.1.2012, 21:58
не пойму проблему. 
вот таким образом можно получить Тиц домена картинкой:

http://yandex.ru/cycounter?test.ru

при запросе браузером проблем не возникает.

но если запрашивать AnyEvent::HTTP, то отдает ошибку... но иногда нормально

LWP::UserAgent отдает статус 200, но без тела... только заголовок. но опять же иногда нормально smile

Проблема началась несколько дней назад. до этого те же скрипты работали прекрасно.

Так же, те же самые скрипты на AnyEvent::HTTP и LWP::UserAgent без проблем работают... получение любого сайта или картинки не составляет проблемы...

первая мысль была... яндекс забанил IP адреса... попробовал и с домашнего компа и с сервера... проблема сохраняется...

что может быть? 
скрипты рабочие. другие страницы скачиваются
http://yandex.ru/cycounter?test.ru с броузером тоже работает.

что то я потерялся.... у кого какие мысли?





Добавлено @ 22:04
ох... а каким образом заголовок темы отредактировать?  smile 







Автор: arto 28.1.2012, 23:37
http://en.wikipedia.org/wiki/Chunked_transfer_encoding

Автор: djusha 29.1.2012, 00:07
Цитата(arto @ 28.1.2012,  23:37)
http://en.wikipedia.org/wiki/Chunked_transfer_encoding

И ???

Это он под AnyEvent так говорит. и то не всегда. Часто по другому - типа 596 | M-PM-^RM-QM-\0M-PM-5M-PM-<M-QM-^O M-PM->M-P...
под LWP смотрели?

умные мысли меня не посетили...


Автор: Pfailed 29.1.2012, 08:25
Яндекс специльно или случайно кидает кривой ответ, который LWP обработать не может. Причину видно в заголовке в поле "X-Died".

Автор: djusha 29.1.2012, 09:22
Цитата(Pfailed @ 29.1.2012,  08:25)
Яндекс специльно или случайно кидает кривой ответ, который LWP обработать не может. Причину видно в заголовке в поле "X-Died".

Это понятно, что яндекс включил защиту. причем буквально недавно.
другой вопрос, что броузер то нормально показывает.  причем в опере из режима отладки разные заголовки подсовывал / убирал... все равно работает... показывает...

Из скрипта не хочет
пробовал (под LWP) играть с заголовками, безрезультатно... под AnyEvent просто еще не разобрался как заголовки подсовывать....


по поводу заголовка... поля "X-Died". что то не видно его

под AnyEvent смотрю

Код

my ($body, $hdr) = @_;
use Data::Dumper;
print Dumper $hdr;


получаю 

$VAR1 = {
          'Reason' => 'Время ожидания соединения истекло',
          'URL' => 'http://yandex.ru/cycounter?www.com',
          'Status' => 596
        };   

или не так смотрю?

Автор: Pfailed 29.1.2012, 09:51
Это не похоже на защиту, скорее на ошибку. Ответ просто не соответствует спецификации HTTP 1.1. Видимо браузеры более лояльно относятся к спецификации чем lwp.
Вот например
Цитата

$ curl -i http://yandex.ru/cycounter?test.ru
HTTP/1.1 200 OK
Connection: Keep-Alive
Date: Sun, 29 Jan 2012 06:45:32 GMT
Server: Apache/2.2.9 (Unix) mod_perl/2.0.4 Perl/v5.12.1
Last-Modified: Thu, 30 Dec 2010 04:25:47 GMT
Expires: Thu, 13 Jan 2011 04:25:47 GMT
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: image/gif
Transfer-Encoding: chunked



А в описании протокола четко сказано
Цитата

The "chunked" transfer-coding MUST NOT be applied more than once to a message-body

http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6

"X-Died" это в lwp:
Код

print $response->as_string;


Напишите письмо в Яндекс, может исправят.

Автор: djusha 29.1.2012, 10:15
Цитата(Pfailed @ 29.1.2012,  09:51)
Это не похоже на защиту, скорее на ошибку. Ответ просто не соответствует спецификации HTTP 1.1. Видимо браузеры более лояльно относятся к спецификации чем lwp.
Вот например
Цитата

$ curl -i http://yandex.ru/cycounter?test.ru
HTTP/1.1 200 OK
Connection: Keep-Alive
Date: Sun, 29 Jan 2012 06:45:32 GMT
Server: Apache/2.2.9 (Unix) mod_perl/2.0.4 Perl/v5.12.1
Last-Modified: Thu, 30 Dec 2010 04:25:47 GMT
Expires: Thu, 13 Jan 2011 04:25:47 GMT
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: image/gif
Transfer-Encoding: chunked



А в описании протокола четко сказано
Цитата

The "chunked" transfer-coding MUST NOT be applied more than once to a message-body

http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6

"X-Died" это в lwp:
Код

print $response->as_string;


Напишите письмо в Яндекс, может исправят.

написать, мол, вот мне Вас сканировать не получается... исправте...  smile 

не... все больше убеждаюсь, это защита от сканирования... 

тут вопрос стоит, как замаскировать запросы скрипта под браузер...

Добавлено через 8 минут и 25 секунд
хех...  тот же запрос из Вашего примера:

$ curl -i http://yandex.ru/cycounter?test.ru 

получает и заголовок и тело нормально... 

Автор: djusha 29.1.2012, 16:26




Хмммм... есть нехорошее подозрение, что у яндекса все починилось....

хотя местами косяки проскакивают...





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