模拟登陆 Python

作者: Amrzs | 来源:发表于2014-06-14 16:41 被阅读267次

    模拟登陆 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()
    

    相关文章

      网友评论

        本文标题:模拟登陆 Python

        本文链接:https://www.haomeiwen.com/subject/wjqjtttx.html