2012-02-16 10 views
1

私はパスワードで保護されたサイトにログインするためのperlスクリプトを書こうとしています。私はWWW :: Mechanizeモジュールを使っていますが、このサイトはいくつかの点で異なります。perlを使ってhttpsサイトにログイン

-機械化されていないページで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(); 
+0

資格情報を()の4つの引数を取ります。 [サンプルコードを含むこのスレッド](http://www.perlmonks.org/?node_id=437928)を参照してください。 –

+0

乾杯。 mechanize [documentation](http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize.pm#$mech-> credentials(_ $ username、_ $ password_))は、2つの引数がまた許容される。 – wxnerd

+0

ああ、ご容赦ください。彼らはその機能を拡張したことを認識していませんでした。 –

答えて

2

ブラウザこれはRFC 2617に記載の方法WWW::MechanizecredentialsLWP::UserAgentに記載、HTTP認証されるポップアップボックス

を表示します。

JavaScriptは表示されません。たぶん、認証後の文書でのみです。私のdocumentation improvement for JS-enabled Mech-workalikesを参照してください。


編集:

Antonio Dolcetta's answerは、NTLM認証方式が使用されていることをヒントを与えます。 Authen::NTLMのバージョンをアップグレードしてください。 LWP::Authen::Ntlmのマニュアルに従って、キープアライブを有効にし、netloc(ポート番号を含む)とユーザー名(NTドメイン名を含む)に正しい表記法を使用してください。

+0

ありがとう、私は資格証明方法を使用していくつかの並べ替えを試みましたが、./mech_test.pl行14_でメッセージを_Unauthorized取得し続けます。上記の質問にサンプルコードを追加しました。 – wxnerd

+0

ありがとうございました! – wxnerd

0

有効なhttpヘッダープラグインを有効にしてfirefoxを使用します。

このようにして、どのような情報が出入りしているのかを知ることができ、それを複製することができます。

このページでは、ブラウザのバージョン検出、JavaScriptの検出などのように、他のものをチェックしてボットを許可しない可能性があります。

また、$ urlには\ t文字が含まれています。

1

NTLMを使用して認証されているようです。 LWP :: Authen :: Ntlmがインストールされていることを確認してください。

は、も参照してください(この例では、WWW :: Mechanizeのの代わりに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

関連する問題