2011-05-20 25 views
5

Bu beni delirtiyor. Temel olarak, kullanıcı adımı ve parolamı kodladığımda, hiçbir sorunla karşılaşmam. Ancak, bu programı başkalarıyla paylaşmak istediğimden, kullanıcı adını ve şifresini girmesini istemek istiyorum. (Program bizim ders sitesine giriş ve ders çalışma bilgi her indirmek gerekiyordu - konferanslar, hw, vs)Web Sitesi Giriş Perl ve Mechanize ile oturum aç

Bu kod çalışır:

use WWW::Mechanize; 
use LWP; 

my $username = 'user'; 
my $password = 'pass'; 

my $mech = WWW::Mechanize->new(); 
$mech -> cookie_jar(HTTP::Cookies->new()); 
$mech -> get('log-in url'); 
$mech -> form_name('theform'); 
$mech -> field ('username' => $username); 
$mech -> field ('password' => $password); 
$mech -> click ('log in'); 
print $mech-> content(); 

ancak, denemek ve kullanıcı istemi zaman giriş bilgilerini girmek için şimdi çalışır. Baskı içerik log-in sayfanın html değil Aşağıdaki sayfa (kurslar sayfa için söz konusu kullanıcı) onlar aslında aynı şey olduğundan

use LWP; 
use WWW::Mechanize; 

my $login_url = 'log-in url'; 
print "\nUser name: "; 
my $username = <>; 
print "Password: "; 
my $password = <>; 

my $mech = WWW::Mechanize->new(); 
$mech -> cookie_jar(HTTP::Cookies->new()); 
$mech -> get($login_url); 
$mech -> form_name('theform'); 
$mech -> field ('username' => $username); 
$mech -> field ('password' => $password); 
$mech -> click ('log in'); 
print $mech-> content(); 

bu gerçekten hiç mantıklı döndürür. Hatta isteminde/kullanıcı adı/parola yazdım ve hala hiçbir boşuna ..... (Ayrıca bir web sitesi ve oturum açma bilgisi olmadan kontrol etmek çok kolay olmayacağını fark ediyorum, bu konuda üzgünüm)

+3

Kodunuzda "LWP" ve "$ mech -> cookie_jar (HTTP :: Cookies -> new());' i kullanmanız gerekmez; Otomatik olarak çerezlerle çalışır. – gangabass

cevap

11

kullanıcının gönderdiği girişi chomp() çalıştırmak gerekir:

my $username = <>; 
chomp($username); 

kullanıcı tarafından sağlanan metin giriş bilgilerinizi bozuyor sonunda bir satır başı vardır.

+0

Teşekkürler! başlangıçtaki kitaplardan bahsetmek isterdim (muhtemelen bahis yapabileceğim bir yere var) – msikd65

+4

@ msikd65 Deve Kitabının 1. Bölümünde, aşağıdakileri içeren bir FileHams bölümü bulunur: "satır okuma işlemi, satır satırını otomatik olarak giriş satırınızdan kaldırmaz (girişiniz, örneğin, "9 \ n" ')." – CanSpice

+0

Veri :: Damper kullanın ve Döküm $ some_variable çok sık yararlıdır. Kullanıcı tarafından basılan "enter tuşuna" gösterecektir. Sonuç olarak, bazı veriler dış kaynaktan alındığında, gereksiz veya bazen toksik karakterleri ortadan kaldırmak için ayrıştırılmalıdır. Perl'in neden taint modda oluşturulduğunun nedeni budur. – Znik

2

CanSpice doğru olmakla birlikte, aynı zamanda Term::ReadPassword bakmak isteyebilirsiniz, bu istemi sağlar, bu girdi gizler VE sizin için chomp ilgilenir!

İlgili konular