2011-05-20 78 views
3

這裏有點缺乏經驗的程序員試圖編寫程序登錄我的課程網站並下載所有內容(講座作業等)。顯然這是一個密碼保護網站,所以我必須給它。我理解LWP :: UserAgent和類似的,並且我需要使用憑據。我無法弄清楚的是如何進入下一頁。我可以登錄,但perl如何獲得我的登錄結果?用LWP和Perl登錄網站

代碼示例(我明明拉出日誌信息):

use LWP::UserAgent; 

my $ua = LWP::UserAgent->new; 
my $url = 'login URL'; 
$ua -> credentials(
    $url, 
    '', 
    'user', 
    'pass' 
); 
my $response = $ua ->get($url); 
print $response->content; 

內容從反應是同樣內容我會得到,如果我沒有通過任何憑據。很明顯,我在這裏失去了一些東西....

哦,我自己的課程網站沒有一個獨特的網址,據我所知。

回答

5

您可能希望使用WWW::Mechanize,它是LWP :: UserAgent的一個子類,設計用來更像瀏覽器,允許您瀏覽網頁,並使用已經爲您保管的cookie存儲。

+0

謝謝。再讀一遍! (我知道它在那裏,但有時候我會猜測它在尋找正確的地方) – msikd65 2011-05-20 16:06:51

2

如果站點使用HTTP基本身份驗證,則只使用credentials,在這種情況下,您不會「登錄」,只需將憑據傳遞給每個請求即可。

如果該網站具有基於表單的登錄系統,那麼您需要使用cookie_jar並請求表單的操作URI以及它期望的任何數據。

+0

感謝您的快速回復。我想我需要閱讀HTTP和網絡的工作原理等。 – msikd65 2011-05-20 16:05:34

0
#!/usr/bin/perl 

use LWP::UserAgent; 
use HTTP::Cookies; 

my $ua=LWP::UserAgent->new(timeout => 20); 
    $ua->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.8) Gecko/20100202 MRA 5.5 (build 02842) Firefox/3.5.8'); 
    $ua->requests_redirectable(0); 

my $cook = HTTP::Cookies->new; 
    $ua->cookie_jar($cook); 

print = requester('http://urlexample/login.php', 'login=yourlogin&password=pass')->as_string; 

sub requester 
{ 
    my $type = 'GET'; 
    if($_[1]){$type = 'POST'} 
    my $req = HTTP::Request->new($type => $_[0]); 
    $req->content_type('application/x-www-form-urlencoded; charset=UTF-8'); 
    if($_[1]){$req->content($_[1])} 
    my $res = $ua->request($req); 
    return $res; 
}