模拟登陆 Python
from my wp blog
OOP老师有个网站,用于发布课件和布置提交作业,截止后作业都放在网上供学生下载
我浙大牛不少,把程序抓出来研究一下源码
模拟登陆
- 关于网站
- 木有验证码
- 无需输入
- 无需识别
- 下载文件与绝对url无关,需要先访问一个页面,然后才能下载
- 可能是headers的refer
- 学生代码格式不统一
- .cpp
- .zip
- .rar
- .tar.gz
- 木有验证码
引入几个库,伪造表单数据
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) #把数据编码为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) #响应头和内容
查看result数据,发现已经登陆
先访问一个页面,然后在这个页面中下载代码文件
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))
这个时候代码文件已经下载,所需要做的是给一个文件名
在响应头里面可以找到一些东西,用正则可以抓出文件名,然后文件写入保存
import re
filenameRe = re.compile(r'^.*filename=(.+)$')
...
...
filename = '100/' + str(id) + '_'+ filename
outfile = open(filename, 'wb')
outfile.write(result.read())
outfile.close()
网友评论