2004年9月4日 星期六

Perl與POST大打出手

因為所以,我得用Perl寫出一個測試帳號密碼在某網頁上是否正確的認證功能。網路上找到的資料大都是教如何GET網頁,可是用POST送出變數再抓回傳回的資料,都沒有人教。>_<

總之賣力的google與測試後,終於找出方法啦!終是歸究於我不會用程式跟各式server們溝通..咚!不管啦!有寫出來就很好了啦~

程式碼如下~

# 後面兩個為啥要use我也不知道:p
use CGI;
use Socket;
use Getopt::Long;
use FileHandle;

# 把前頁輸入的帳號密碼抓進來
my $username = $query->param('username');
my $password = $query->param('password');

# 設定要去POST驗證所需的各參數: 主機位址,程式路徑,port,要POST的變數
my $server="127.0.0.1";
my $ckpath="/lalala/login";
my $port=80;
my $ckvar="rno=".$username."&pwd=".$password;

# 重要的SOCKET連接
socket(SOCKET, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))[2]);

connect(SOCKET, pack('Sna4x8', AF_INET, $port, (gethostbyname($server))[4])) || die "ERR";

SOCKET->autoflush();

# 超重要之「利用POST驗證帳號密碼」
print SOCKET "POST ".$ck_path." HTTP/1.0\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: ".length($ckvar)."\r\n\r\n".$ckvar."\r\n";

# 在傳回內容中,若找到錯誤訊息,表示帳號密碼錯誤
while(< SOCKET >)
{ if (/您的證號不正確/i)
{ print "Content-type: text/html\n\n";
print "您的證號或密碼不正確\n";
exit;
}

# $_ 為內容,可將內容先存於變數中做其他處理
# $info.=$_;
}


最重要的就是 print SOCKET "POST ...."那一行,會的人不要笑我,不會的人可以跟我一起加油~^^/ 這一架,Perl總算打贏啦~

沒有留言:

張貼留言