Войдите на сайт https, используя perl - PullRequest
1 голос
/ 16 февраля 2012

Я пытаюсь написать Perl-скрипт для входа на сайт, защищенный паролем. В прошлом я использовал модуль WWW :: Mechanize для подобных задач, но этот сайт отличается по двум причинам:

-Используется JavaScript на защищенных страницах, поэтому механизация не будет работать. Я бы предпочел реализовать что-то с помощью браузера без головы, так как скрипт работает каждый час на моей рабочей машине.

- У него нет формы входа, скорее браузер отображает всплывающее окно для входа в систему, и я не могу понять, как с этим справиться.

URL: https://fwxwww2.hpr.for.gov.bc.ca/Scripts/Public/Common/Report.asp?Report=Hourly

Я нашел достаточно хороших ресурсов для того, чтобы продолжить работу с javascript после входа в систему, так что на самом деле это просто способ аутентификации, что поставило меня в тупик. Заранее спасибо за любые предложения о том, как подойти к этому. Я открыт для решений, не связанных с Perl, но я использую Cygwin, поэтому возможности несколько ограничены.

#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;
use Data::Dumper;

my $url= 'https://fwxwww2.hpr.for.gov.bc.ca/Scripts/Public/Common/Report.asp?Report=Hourly';
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->credentials(
    'myusername',
    'mypassword'
);
$mech->get( $url );
print $mech->content();

Ответы [ 3 ]

2 голосов
/ 16 февраля 2012

браузер отображает всплывающее окно

Это HTTP-аутентификация, описанная в RFC 2617 и задокументированная в методе credentials в WWW::Mechanize и LWP::UserAgent.

Я не вижу задействованного JavaScript.Возможно только в документах после аутентификации.См. Мое улучшение документации для JS-совместимых механоделов .


edit:

Ответ Антонио Дольчетты дает подсказку, что используется схема аутентификации NTLM.Обновите вашу версию Authen :: NTLM .Согласно документации LWP :: Authen :: Ntlm , включите поддержку активности и используйте правильные обозначения для netloc (включая номер порта) и имени пользователя (включая имя домена NT).

1 голос
/ 17 февраля 2012

Похоже, что этот сайт использует NTLM для аутентификации.Убедитесь, что у вас установлен LWP :: Authen :: Ntlm.Попробуйте что-то вроде этого (этот пример использует LWP :: UserAgent вместо WWW :: Mechanize, но должен быть таким же)

0 голосов
/ 17 февраля 2012

Использовать Firefox с подключенным плагином http-заголовков.

Таким образом, вы можете видеть, какая информация входит и выходить, и вы можете ее копировать.

Возможно, эта страница проверяет другие вещи, запрещающие ботов, такие как определение версии браузера, обнаружение JavaScript и т. Д.

Также ваш $ url содержит символ \ t.

...