本文主要用python實現(xiàn)了對網站的模擬登錄。通過自己構造post數(shù)據(jù)來用Python實現(xiàn)登錄過程。
當你要模擬登錄一個網站時,首先要搞清楚網站的登錄處理細節(jié)(發(fā)了什么樣的數(shù)據(jù),給誰發(fā)等...)。我是通過HTTPfox來抓取http數(shù)據(jù)包來分析該網站的登錄流程。同時,我們還要分析抓到的post包的數(shù)據(jù)結構和header,要根據(jù)提交的數(shù)據(jù)結構和heander來構造自己的post數(shù)據(jù)和header。
分析結束后,我們要構造自己的HTTP數(shù)據(jù)包,并發(fā)送給指定url。我們通過urllib2等幾個模塊提供的API來實現(xiàn)request請求的發(fā)送和相應的接收。
大部分網站登錄時需要攜帶cookie,所以我們還必須設置cookie處理器來保證cookie。
具體代碼和講解如下
- #!/usr/bin/python
- import HTMLParser
- import urlparse
- import urllib
- import urllib2
- import cookielib
- import string
- import re
- #登錄的主頁面
- hosturl = '******' //自己填寫
- #post數(shù)據(jù)接收和處理的頁面(我們要向這個頁面發(fā)送我們構造的Post數(shù)據(jù))
- posturl = '******' //從數(shù)據(jù)包中分析出,處理post請求的url
- #設置一個cookie處理器,它負責從服務器下載cookie到本地,并且在發(fā)送請求時帶上本地的cookie
- cj = cookielib.LWPCookieJar()
- cookie_support = urllib2.HTTPCookieProcessor(cj)
- opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
- urllib2.install_opener(opener)
- #打開登錄主頁面(他的目的是從頁面下載cookie,這樣我們在再送post數(shù)據(jù)時就有cookie了,否則發(fā)送不成功)
- h = urllib2.urlopen(hosturl)
- #構造header,一般header至少要包含一下兩項。這兩項是從抓到的包里分析得出的。
- headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1',
- 'Referer' : '******'}
- #構造Post數(shù)據(jù),他也是從抓大的包里分析得出的。
- postData = {'op' : 'dmlogin',
- 'f' : 'st',
- 'user' : '******', //你的用戶名
- 'pass' : '******', //你的密碼,密碼可能是明文傳輸也可能是密文,如果是密文需要調用相應的加密算法加密
- 'rmbr' : 'true', //特有數(shù)據(jù),不同網站可能不同
- 'tmp' : '0.7306424454308195' //特有數(shù)據(jù),不同網站可能不同
- }
- #需要給Post數(shù)據(jù)編碼
- postData = urllib.urlencode(postData)
- #通過urllib2提供的request方法來向指定Url發(fā)送我們構造的數(shù)據(jù),并完成登錄過程
- request = urllib2.Request(posturl, postData, headers)
- print request
- response = urllib2.urlopen(request)
- text = response.read()
- print text