2012-02-16 2 views
1

암호로 보호 된 사이트에 로그인하기위한 펄 스크립트를 작성하려고합니다. 나는 과거에 유사한 작업을 위해 WWW :: Mechanize 모듈을 사용해 왔지만,이 사이트는 몇 가지 방법으로 다르다.perl을 사용하여 https 사이트에 로그인하십시오.

- 보호 된 페이지에서 자바 스크립트를 사용하므로 기계화가 작동하지 않는다. 스크립트가 매시간 내 작업 컴퓨터에서 실행되므로 머리가없는 브라우저로 무언가를 구현하는 것을 선호합니다. 브라우저에 로그인 할 수있는 팝업 상자를 표시 오히려 내가 내 인생이 처리하는 방법을 알아낼 수 없습니다에 대한

- 그것은 더 로그인 폼이 없습니다.

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

내가 로그인 한 후 자바 스크립트를 진행하는 방법에 대한 좋은 자원이 충분히 발견했습니다, 그래서 정말 단지를 인증하는 방법에 나를 난처한 상황에 빠진 가지고 있어요. 이 접근 방법에 대한 제안에 대해 미리 감사드립니다. 나는 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(); 
+0

자격 증명을() 네 개의 인수를 취합니다. [샘플 코드를 포함하는이 스레드] (http://www.perlmonks.org/?node_id=437928)를 참조하십시오. –

+0

건배. mechanicalize [documentation] (http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize.pm#$mech-> credentials (_ $ username, _ $ password_))는 두 개의 인수가 또한 허용. – wxnerd

+0

아, 뭐라 구요. 그들이 그 기능을 확장했다는 것을 깨닫지 못했습니다. –

답변

2

브라우저가 팝업 상자

에게 이것은 HTTP 인증, WWW::MechanizeLWP::UserAgent의 방법 credentialsRFC 2617 설명하고 문서화를 표시합니다.

관련 JavaScript가 없습니다. 어쩌면 인증 후에 문서에만있을 수 있습니다. 내 documentation improvement for JS-enabled Mech-workalikes을 참조하십시오.


편집 :

Antonio Dolcetta's answer가 NTLM 인증 체계를 사용하고 있는지 힌트를 제공합니다. Authen::NTLM 버전을 업그레이드하십시오. LWP::Authen::Ntlm 설명서에 따라 keep-alive를 활성화하고 netloc (포트 번호 포함) 및 username (NT 도메인 이름 포함)에 올바른 표기법을 사용하십시오.

+0

감사합니다. 자격 증명 방법을 사용하여 몇 가지 순열을 시도했지만 ./mech_test.pl 라인 14_에서 _Unauthorized 메시지를 계속받습니다. 위의 질문에 몇 가지 샘플 코드를 추가했습니다. – wxnerd

+0

도움 주셔서 대단히 감사합니다! – wxnerd

0

실시간 http 헤더 플러그인이 활성화 된 firefox를 사용하십시오. 당신이 볼 수

이 방법은 무엇 정보 및 외출하고 당신이 그것을 복제 할 수 있습니다.

이 페이지를 확인 다른 것들 등등 브라우저 버전 감지, 자바 스크립트 탐지와 같은 로봇을 차단하는 것이 가능하다.

$ url에 \ t 문자가 포함되어 있습니다.

1

웹 사이트에서 NTLM을 사용하여 인증하는 것처럼 보입니다. LWP :: Authen :: Ntlm이 설치되어 있는지 확인하십시오.

또한 참조 (이 예는 WWW : : 기계화 대신 LWP :: 해당 UserAgent를 사용하지만, 동일해야합니다) 같은 것을보십시오 : http://www.perlmonks.org/?node_id=642656

#!/usr/bin/perl 
use strict; 
use warnings; 
use LWP::UserAgent; 

my $url = 'https://fwxwww2.hpr.for.gov.bc.ca/Scripts/Public/Common/Report.asp?Report=Hourly'; 
# important to use keep_alive for NTLM 
my $ua = LWP::UserAgent->new(keep_alive=>1); 
$ua->credentials('fwxwww2.hpr.for.gov.bc.ca', '', 'username', 'password'); 

my $response = $ua->get($url); 
print $response->content(); 
+0

도움을 주셔서 감사합니다 - 확실히 더 나은 방향으로 지적 해주었습니다. – wxnerd

관련 문제