模擬登陸 Python
from my wp blog
OOP老師有個網(wǎng)站,用于發(fā)布課件和布置提交作業(yè),截止后作業(yè)都放在網(wǎng)上供學(xué)生下載
我浙大牛不少,把程序抓出來研究一下源碼
模擬登陸
- 關(guān)于網(wǎng)站
- 木有驗(yàn)證碼
- 無需輸入
- 無需識別
- 下載文件與絕對url無關(guān),需要先訪問一個頁面,然后才能下載
- 可能是headers的refer
- 學(xué)生代碼格式不統(tǒng)一
- .cpp
- .zip
- .rar
- .tar.gz
- 木有驗(yàn)證碼
引入幾個庫,偽造表單數(shù)據(jù)
import urllib
import urllib2
import cookielib
auth_url = 'http://fm.zju.edu.cn/login.php'
data = {
'user' : setting.user,
'passwd' : setting.passwd,
}
postData = urllib.urlencode(data) #把數(shù)據(jù)編碼為url格式
cookie管理
cookieJar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
偽造請求頭
headers = {
'Host' : setting.host,
'Referer' : setting.referer,
}
req = urllib2.Request(auth_url, postData, headers)
req.add_header('User-Agent', setting.user_agent) #ua加入更健康
result = opener.open(req) #響應(yīng)頭和內(nèi)容
查看result數(shù)據(jù),發(fā)現(xiàn)已經(jīng)登陸
先訪問一個頁面,然后在這個頁面中下載代碼文件
assign_url = 'http://fm.zju.edu.cn/showProblem.php?cid=**&pid=**'
result = opener.open(assign_url)
file_url = 'http://fm.zju.edu.cn/dls.php?cid=**&id='
for id in range(0, 150):
result = opener.open(file_url+str(id))
這個時候代碼文件已經(jīng)下載,所需要做的是給一個文件名
在響應(yīng)頭里面可以找到一些東西,用正則可以抓出文件名,然后文件寫入保存
import re
filenameRe = re.compile(r'^.*filename=(.+)$')
...
...
filename = '100/' + str(id) + '_'+ filename
outfile = open(filename, 'wb')
outfile.write(result.read())
outfile.close()