2013-07-26 3 views
1

Я пытаюсь заполнить веб-форму, используя библиотеку Mechanize Perl.Perl WWW :: Mechanize - Ошибка аутентификации GETing URL

Всякий раз, когда я ввожу URL-адрес в поле поиска, он предлагает следующее сообщение, и я могу вручную войти в систему успешно.

enter image description here

Однако, когда я бегу ниже сценарий, я получаю следующее сообщение об ошибке:

enter image description here

Как правильно заполнить первые учетные данные аутентификации Box с помощью моего $mech объекта?

my $mech = WWW::Mechanize->new('keepalive' => 1); 

my $url = "http://URL/I/NEED/TO/ACCESS"; 
my $username = "username"; 
my $password = "password"; 

$mech->credentials($username, $password); 
$mech->get($url);   <----------------- ERROR (LINE 93) 

EDIT:

Вот результаты выполнения wget на запрашиваемом сайте

--2013-08-30 11:16:17-- http://moss.micron.com/MFG/ProbeTest/Lists/Manufacturing%20Requests/AllItems.aspx 
Resolving moss.micron.com... 137.201.88.118 
Connecting to moss.micron.com|137.201.88.118|:80... connected. 
HTTP request sent, awaiting response... 
    HTTP/1.1 401 Unauthorized 
    Server: Microsoft-IIS/7.0 
    WWW-Authenticate: Negotiate 
    WWW-Authenticate: NTLM 
    X-Powered-By: ASP.NET 
    MicrosoftSharePointTeamServices: 12.0.0.6341 
    Date: Fri, 30 Aug 2013 17:16:17 GMT 
    Connection: keep-alive 
    Content-Length: 0 
Authorization failed. 
+0

Какую версию Mechanize вы используете? – Nate

+0

Как проверить текущую версию? –

+0

Только что проверено. Я использую VERSION 1.70 –

ответ

0

В старых версиях Mechanize вы могли бы подкласс WWW::Mechanize пакета и предоставить свои собственные учетные данные рутины :

package MyMech; 

use vars qw(@ISA); 
@ISA = qw(WWW::Mechanize); 

sub get_basic_credentials { 
    my ($self, $realm, $uri) = @_; 
    return("user", "password"); 
} 

Тогда в вашей программе использовать этот пакет вместо WWW :: Mechanize:

package main; 

my $mech = MyMech->new(); 
$mech->get($url); 

Update

Вы обновили свой вопрос, чтобы указать требование аутентификации NTLM. Проверьте LWP::Authen::Ntlm на CPAN.

+0

Что случилось с обычной учетной записью по умолчанию? Он выглядит так же, как тот, который вы предлагаете переопределить. –

+0

. Я больше не получаю ошибку подключения, но похоже, что агент Mech правильно загружает веб-страницу. Даже если я удаляю подпрограмму 'get_basic_credentials', она, по-видимому, позволяет мне получить URL-адрес (что является подозрительным). Кроме того, ничего не появляется, когда я пытаюсь сбрасывать формы в $ mech-> forms –

+0

@ user1022944 ничего плохого в обычной учетной записи. Но много лет назад я начал использовать этот шаблон, который работал бы, когда другие методы не удались. Также обратите внимание, что это работает с HTTP Basic Auth, а не с Digest Auth. В рамках вашего вопроса я рекомендую вам запустить wget и вставить копию вывода (чтобы мы могли видеть заголовки с вашего сайта): 'wget -O/dev/null -S http://www.bbc.co.uk/'(но замените BBC для URL-адреса, который вы выбираете). –

Смежные вопросы