perl 使用 HTTP::UserAgent , HTTP::Cookies , HTML::Form 操作網頁

說明:透過網頁表單的提交的方式來達到修改使用者帳號預設密碼,因為資料庫密碼欄位非明碼且預設密碼為空白,又因不知道其加密編碼方式,所以才這樣做。

設計過程中 利用firebug來抓取form POST哪些欄位值

perl 程式碼

# Create a user agent object
#可使用HTML::From->dump的function來了解form內有哪些元素,可進行操作
use LWP::UserAgent;
use HTTP::Cookies;
use HTML::Form;

if(@ARGV != 3){ print "請依序帶入三個參數:使用者帳號,舊密碼,新密碼n";}
print $ARGV[1].$ARGV[2];
if($ARGV[1]=="''"){$ARGV[1]='';}
if($ARGV[2]=="''"){$ARGV[2]='';}
#建立使用者代理器取的網頁資訊
my $ua = LWP::UserAgent->new;
$ua->agent("MyApp/0.1 ");

#設定一個cookie配置,並指定給剛剛設定的網頁代理
my $cookie_jar = HTTP::Cookies->new(file => "$ENV{'HOME'}/lwp_cookies.dat",autosave => 1,);
$ua->cookie_jar($cookie_jar);

#設定網頁代理程式可以接受server指定的轉跳頁面
push @{ $ua->requests_redirectable }, 'POST';

#進入登入頁面填上帳號和密碼登入
my $login_page = "http://192.168.0.245/efnet/src/_Common/AppUtil/FrameSet/EFDBLogin.aspx";
my $res = $ua->get($login_page);
my @forms = HTML::Form->parse($res);
$forms[0]->value(txtName=>$ARGV[0]);
$forms[0]->value(txtPassword=>$ARGV[1]);
$res = $ua->request($forms[0]->click);

#登入後自行切換到使用者密碼變更頁,進行使用者帳號預設密碼的變更作業
$res = $ua->get('http://192.168.0.245/efnet/src/ADM/ADMI10/ADMI10.aspx');
@forms = HTML::Form->parse($res);
$forms[0]->value('BtnEdit.x'=>13);
$forms[0]->value('BtnEdit.y'=>23);
$res = $ua->request($forms[0]->click);
@forms = HTML::Form->parse($res);

#修改登入帳號,使用者名稱,使用者密碼和密碼確認
$forms[0]->value('IsSaved'=>'true');
$forms[0]->value('MA001$txt'=>$ARGV[0]);
$forms[0]->value('MA003$txt'=>$ARGV[2]);
$forms[0]->value('VerifyMA003$txt'=>$ARGV[2]);

$res=$ua->request($forms[0]->click);
#print $res->content;
@forms = HTML::Form->parse($res);

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s