V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ifane
V2EX  ›  程序员

关于模拟登录教务系统的一些疑问

  •  
  •   ifane · 2016-05-11 15:40:52 +08:00 · 5857 次点击
    这是一个创建于 3107 天前的主题,其中的信息可能已经有所发展或是发生改变。

    模拟教务系统所需要的几个参数

    • 请求 Cookie
    • __VIEWSTATE
    • __VIEWSTATEGENERATOR
    • __EVENTVALIDATION

    请求 cookie 会在进教务系统响应给浏览器

    __VIEWSTATE \ __VIEWSTATEGENERATOR \ __EVENTVALIDATION这三个是隐藏在 html 表单里面的 8730b9c0-9982-42ce-9b18-2640506fdc58.png

    当 POST 数据时 f2dc2a60-066d-4dd9-be78-09cf302455d0.png

    请求头里有请求 Cookie

    请求主体里有__VIEWSTATE, 但是这个是由下面组合而成的

    __VIEWSTATE=__VIEWSTATE+&+__VIEWSTATEGENERATOR+&+__EVENTVALIDATION+&+Account+&+PWD+&CheckCode+&+cmdok

    每一个标签内包含的/标记 统统转为%2F,=统统转为%3D,+统统转为%2B

    __VIEWSTATE=%2FwEPDwUKMTA0NDkyOTUxNA9kFgICAw9kFgQCDw8PFgIeBFRleHRlZGQCEQ8PFgIfAAUCMjBkZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAQUHQ2hrVXNlclVLjABopnY3NiJFSz0oR293GTZC
    &__VIEWSTATEGENERATOR=DD4FBC66
    &__EVENTVALIDATION=%2FwEWBwKx8tHqBQKvo8HwCwKG85bvBgLO44u1DQLAiqigBwLM6LcMApnA7cMNf4XQgPVkJVQsZf3FTrkhLdziQ4k%3D
    &Account=*****
    &PWD=******
    &CheckCode=je9p
    &cmdok=
    

    post 数据以后会得到一个响应的 Cookie 030fdd73-e0fd-4fcc-8898-7af54fc80eeb.png a75b7dc5-02ed-4d71-9750-9b40551b0ee7.png

    那么就有了一个完整的 Cookie

    Cookie: ASP.NET_SessionId=k0rk4pyovyhc1l454tejrrrv; .ASPXAUTH=9FD433C6CC5CFE062C636A99A7DAD8CBDD8E0BCC5AF8F632F48F7879D46B40DE3E81C216943FDDEA7C57454B80C8BE24E7AFBB41253A81C6FFA1A799C5F441204216B1D884426C3CF9A5B2774E422F2633EABC5A5BB212C7DD4E887CBD301DEE4A60917E17121E54DAB4023421D4FEE762BA661C
    

    通过这个完整的 Cookie 就可以查询课表,查询成绩等

    ····················

    以上是我的分析,但是在我实践过程当中 post 数据会自动跳转到登录页面

    得不到登录成功后的完整 Cookie,

    94f12272-8e68-47c9-b7b0-176f1ee67c4f.png

    9698fc63-0198-49f4-b0c7-63d60f647511.png 这里本来应该显示表单数据,变成了请求负载,

    是我的 POST 方法不正确么?

    27 条回复    2016-05-21 20:03:49 +08:00
    Feiox
        1
    Feiox  
       2016-05-11 15:53:45 +08:00
    正方教务系统 :P
    ifane
        2
    ifane  
    OP
       2016-05-11 15:54:21 +08:00
    @Feiox 强智教务系统
    jimzhong
        3
    jimzhong  
       2016-05-11 16:01:07 +08:00
    以前做过正方的模拟登录,没有遇到楼主的问题。
    模拟登录失败可能是由于服务端会检查 UA ?
    楼主可以试试用 requests 的 session 。不用操心 cookie 。
    lxy
        4
    lxy  
       2016-05-11 16:03:53 +08:00
    网址……写对了吗?
    ifane
        5
    ifane  
    OP
       2016-05-11 16:20:43 +08:00
    @lxy 对了
    ifane
        6
    ifane  
    OP
       2016-05-11 16:21:17 +08:00
    @jimzhong 这个没接触过,不知道是怎么个弄?
    ZombieMisaka
        7
    ZombieMisaka  
       2016-05-11 16:28:31 +08:00
    教务系统想要纯用 post 拿到数据很难,到后面会有各种坑,比如不同系统之间跳转(认证系统和教务系统不是一个公司做的),还有课程信息几乎全部是 js 请求得到的,而简单的 post 并不能获取到 js 运行后的 html,建议使用 selenium 这种自动化来实现功能,简单方便
    hxndg
        8
    hxndg  
       2016-05-11 16:32:25 +08:00
    额。。。我在些登录我们学校的教务的时候,直接用的 request 的 session ,木有遇到问题,建议还是直接用 request 把。 http://docs.python-requests.org/en/master/
    hxndg
        9
    hxndg  
       2016-05-11 16:33:32 +08:00
    但是,如果要真是想抓取到各种信息的话,就好像北邮人论坛的那种必须得看 js 的解析了,这个就很尴尬了。
    Soar360
        10
    Soar360  
       2016-05-11 17:03:35 +08:00
    一看就是 ASP.NET WebForm ,呵呵哒。仔细检查下你的 Post 数据到底正确不吧。一般是没问题的。
    ifane
        11
    ifane  
    OP
       2016-05-11 17:05:37 +08:00
    @Soar360 我可以确定没错.
    lxy
        12
    lxy  
       2016-05-11 17:20:53 +08:00
    @ifane 这么自信……我也不好意思再说什么了╮(╯▽╰)╭
    liangmishi
        13
    liangmishi  
       2016-05-11 17:31:12 +08:00 via Android
    http://www.tor1024.com/spider/4218ZDsqRItW57236333
    前几天写过一个正方教务系统
    extreme
        14
    extreme  
       2016-05-11 17:54:08 +08:00
    正方内页会检查 Refer 头,带上 Refer 头,具体内容你 F12 看 POST 时的。
    wuhuaji
        15
    wuhuaji  
       2016-05-11 18:46:11 +08:00
    我也写过 Python 版的模拟登陆,楼主可以参考下:
    https://github.com/WuHuaJi0/jwc/blob/master/auth.py
    Syc
        16
    Syc  
       2016-05-11 18:49:23 +08:00 via Android
    检查 UA 来路 特定 http 头 等
    (还有比如 115 有特定的浏览器 js 钩子)
    cdmaok
        17
    cdmaok  
       2016-05-11 19:30:35 +08:00
    selenium 走起。
    imNull
        18
    imNull  
       2016-05-11 19:53:52 +08:00 via Android
    我们学校也是强智教务系统,但版本可能不一样,我们学校的没你说的那么复杂。
    不知道有木有参考价值 https://github.com/xu42/DLPU-Student-API
    loveyu
        19
    loveyu  
       2016-05-11 23:43:12 +08:00
    之前用 C#做过正方的模拟,每次请求都把信息带全就好了,那个什么表单中的__VIEWSTATE 也得带,不然就报错。
    ysdj
        20
    ysdj  
       2016-05-12 00:54:12 +08:00
    你没请求验证码吧?
    bombless
        21
    bombless  
       2016-05-12 01:12:13 +08:00 via Android
    我印象中 viewstate 是要一路带过去的

    可以查一下关于 asp.net 原理的文章
    sholmesian
        22
    sholmesian  
       2016-05-12 07:15:34 +08:00 via iPhone
    教务系统的话还有一个坑是如果某个参数(包括但不限于用户名)含有中文时,编码统一的问题。
    yjd
        23
    yjd  
       2016-05-12 10:29:35 +08:00
    做 post 很多时候要注意引用页有没有带上。
    yangyanggnu
        24
    yangyanggnu  
       2016-05-12 13:37:21 +08:00
    你 POST 到 http://newjwglxt.jiea.cn/jiaowu_system/login.aspx 试试。

    另外,我用你给的 cookie 进去看了下,有如下链接:
    学院主站
    OA 系统
    新教务系统
    老教务系统
    科研成果申报
    一卡通查询
    资产管理系统

    但都是内网地址,暂时看不什么东西。
    ayaseangle
        25
    ayaseangle  
       2016-05-13 12:04:04 +08:00
    .net webform 做的系统。。。
    lightory
        26
    lightory  
       2016-05-21 17:36:43 +08:00
    @sholmesian 咦,在这里看到你了 :)
    sholmesian
        27
    sholmesian  
       2016-05-21 20:03:49 +08:00 via iPhone
    @lightory 哈哈 好久不见😄
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1051 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:10 · PVG 04:10 · LAX 12:10 · JFK 15:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.