![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
burakov |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Здравствуйте,
стоит задача наладить закачку (скачивание) файлов с файлообменного сервера. Нужно автоматизировать процесс. В связи с чем сразу возникло некоторое количество вопросов. Подскажите хотя бы с теорией. Ни разу не делал. Я решил так. что нужно послать файлообменнику post запрос в котором бы передавались логин, пароль ну и куча всякого в заголовке. Я подсмотрел Firefox -> Tamper Data заголовки и написал код. А в ответ я планировал получить хотя бы Куки типа: Опять же из Тампер дата Set-Cookie=PHPSESSID=3mn5oopf6ekokfbvsub7thrki5; path=/; domain=.filesonic.com PHPSESSID=efe80h7pe9ahf78sg87vok1t35; path=/; domain=.filesonic.com email=isellmp3%40gmail.com; path=/; domain=.filesonic.com nickname=beatport; path=/; domain=.filesonic.com isAffiliate=1; path=/; domain=.filesonic.com role=premium; path=/; domain=.filesonic.com Чтобы далее подставляя эти данные в GET запрос - получать или закачивать файлы.
Но в ответ чего то ни хрена не пришло ![]() посмотрел Dump
здесь ни куков, ни контента Вопрос: может я чего совсем не так делаю? и даже думаю не в том направлении? (куда тогда смотреть?) или хитрый файлообменник - каким то образом просто вычисляет таких как я умников и не дает баловаться? Спасибо. |
||||
|
|||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Проще
my $res = $ua->post($url, [key1=>val1, key2=>val2], key1=>val1, key2=>val2); ^^^^^^^post^^^^^^ ^^^^^headers^^^^^^ |
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Насчет того, что можно проще - это хорошо,
Вопрос: пусть у меня немного сложнее - но почему $res -> content = ''; (пусто) по идее, же если успешная регистрация - там должна быть страница, которая выдается зарегистрированному пользователю, если нет - тогда страница с ошибкой , а у меня пусто. |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Вероятно произошел редирект, потому и пусто. LWP по умолчанию не следуюет за ридеректом на post запрос (см. опцию requests_redirectable). Во-вторых у вас не установлено опции для сохранения cookies (см. опцию cookie_jar).
|
|||
|
||||
burakov |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
немного помогло, но результата все равно нет. Я решил пока не трогать куки, а просто залогиниться хотя бы. для этого взял и получил GET главную страницу Файлообменника
таким образом увидел форму, которая посылает POST запрос Login и Password и подсмотрел ее URL Следующим шагом было посыл POST запроса на URL формы
ответ пришел, но не странички зарегистрированного юзера, а страницы с ошибкой , как будто бы, если бы я исполнил GET запрос на $url = 'http://www.filesonic.com/user/login'; Что я делаю неправильно? Почему не могу зарегистрироваться? |
||||||
|
|||||||
EcSYZ |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 21.6.2007 Репутация: нет Всего: 1 |
Вот этого делать не стоит. Надо использовать нормальный прокси, например Andiparos, и уже по инфе из него создавать запросы в скрипте. Да и может стоить заюзать например Mojo::UserAgent в виду меньшего гемороя с ним. PS:
WTF ? 'Host' => 'www.filesonic.org', ??? или всё таки www.filesonic.COM Это сообщение отредактировал(а) EcSYZ - 24.5.2011, 10:43 |
||||
|
|||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Вот-вот
Во-первых это не нужно: юзерагент вы уже указали, а правильный хост HTTP::Request и сам подставит. Во-вторых, как уже заметили хост указали неверный. Да и вообще представьте себе принцип авторизации и поймите, что без включенных cookies он у вас не удастся. |
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Да с хостом промашка вышла, я его вообще убрал ...
код переписал максимально просто
$res -> content - мне также как и раньше не понравился, но вот в дампе я уже обнаруживаю, параметр "set-cookie", в котором прописана роль=premium (это роль юзера, которым я пытаюсь зайти) ну и остальное. Я не понял - я уже залогинился??? ![]() По поводу $cookie_jar - я никак не могу понять как их включить? в документации написано The default is to have no cookie_jar, i.e. never automatically add ``Cookie'' headers to the requests. Что я перевел - как "по умолчанию куки выключены". Достаточно будет извлечь их из допустим GET запроса к $url = 'http://www.filesonic.com' вот такой конструкцией my $cookie_jar = new HTTP::Cookies; $cookie_jar -> extract_cookies ($res); print $cookie_jar -> as_string; И это будет означать - что куки включены? Я пытаюсь себе представить принцип авторизации, но у меня не получается :(. Где нибудь можно прочитать об этом? |
|||
|
||||
EcSYZ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 21.6.2007 Репутация: нет Всего: 1 |
кусок из одного скрипта своего:
|
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Включаются просто:
$ua = LWP::UserAgent->new(cookie_jar => HTTP::Cookies->new); |
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Да -а-а-а
получилось. Залогинился, ![]() Теперь пытаюсь файл загрузить, тут вообще мрак.
Может конечно куда и грузит, только ответный $res -> content; опять выводит на страничку для загрузки файла, а мне хочется какую нибудь ссылочку ответную на этот файл получить... filesonic.com весь такой аяксовый - может вообще невозможно с ним так работать как я хочу - при помощи perl? |
|||
|
||||
EcSYZ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 21.6.2007 Репутация: нет Всего: 1 |
Что вас сподвигло написать такой отборнейший бред ? Зачем вообще использовать LWP, если каждый раз его занулять и опять делать какие то бессмысленные действия ? Может тогда лучше вообще на сокеты перейти ? ![]() Это сообщение отредактировал(а) EcSYZ - 24.5.2011, 14:18 |
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Согласен, undef на $ua убрал, но, все таки это дело не решило...
![]() Хотя бы в общих чертах - алгоритм действий с файлообменником. 1. Залогинился - получилось 2. Сохранил куки в $cookie_jar (чтобы потом подставлять их в каждый http запрос. 3. Надо сделать upload файлу. нашел что то такое по ссылке http://docs.netive.ru/Oreilly/perl3/lwp/ch05_07.htm по аналогии пытаюсь загрузить файл (лежит в том же каталоге, что и скрит - select3.txt) По первому $res->content - подсмотрел форму, которая отправляет файлы, ее URL, имя 'upload[]' . Думаю в ответ мне даст что то типа странички, где будут ответная ссылка на файл от файлобменника?
Но в ответ пусто... Что не так? Интересует хотя бы алгоритм (уж не до синтаксиса), говорю же первый раз такое делаю, или где почитать? Да и по ходу все немного осложняет то, что это файлообменник? p.s. Судя по всему я таки частично на правильном направлении..., потому как скачать файл из файлообменника получилось... И интересно - сколько раз мне можно куки подставлять - если качка - всю ночь и более может идти с файлообменника? через сколько минут залогиниваться вновь? У кук же там какое время жизни есть? p.s. Посмотрел Dump последнего кода там интересная строка "client-warning" => "Redirect loop detected (max_redirect = 7)", Может можно как то WWW::Mechanize::Firefox Воспользоваться, чтобы он дал отработать аякс коду? но только я в нем что то метода POST не нашел... Это сообщение отредактировал(а) burakov - 24.5.2011, 16:31 |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
cookie_jar достаточно один раз установить в конструкторе и дальше не трогать, они сами сохраняются и воставляются в запросе.
У загрузки файлов принцип такой: $ua->post($url, Content_Type => "form-data", Content => ['upload[]' => ['select3.txt']]) |
|||
|
||||
burakov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Все равно Dump $res->content от загрузки файла получается вот таким
Может я нельзя таким образом загрузить файл на данный файлообменник? Что еще можно придумать?
Блин, ну есть же вот такие вот сайты http://www.reupload.it значит как то можно все таки автоматизировать процесс? Это сообщение отредактировал(а) burakov - 24.5.2011, 22:04 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |