模拟登陆 Python

模拟登陆 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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,270评论 25 709
  • 人生做减法,维护好个人名片+做好自己专业=成功。 1.包括个人形象、名声,社会关系网 2.成为本专业专家 其他的娱...
    厘米元满阅读 2,823评论 0 0
  • Teacher's Day I express great gratitude and thanks with m...
    享悦moonlight阅读 2,849评论 0 0