V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wind3110991
V2EX  ›  问与答

最近教务系统升级了。。用 python 爬时, URL 被加密了无法操作模拟登陆

  •  
  •   wind3110991 · 2015-04-18 23:08:17 +08:00 · 4148 次点击
    这是一个创建于 3499 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Header里的信息:

    General
    Remote Address:222.201.132.116:80
    Request URL:http://222.201.132.116/(wa4qm345dj1m5i55qectnu22)/default2.aspx
    Request Method:POST
    Status Code:302 Found

    Cache-Control:no-cache, no-store
    Content-Length:173
    Content-Type:text/html; charset=gb2312
    Date:Sat, 18 Apr 2015 13:43:18 GMT
    Expires:-1
    Location:/(wa4qm345dj1m5i55qectnu22)/xs_main.aspx?xh=(这里是我的教务系统ID)
    P3P:CP=CAO PSA OUR
    Pragma:no-cache
    Pragma:no-cache
    Server:Microsoft-IIS/6.0
    X-AspNet-Version:1.1.4322
    X-Powered-By:ASP.NET

    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
    Accept-Encoding:gzip, deflate
    Accept-Language:zh-CN,zh;q=0.8
    Cache-Control:max-age=0
    Connection:keep-alive
    Content-Length:198
    Content-Type:application/x-www-form-urlencoded
    Host:222.201.132.116
    Origin:http://222.201.132.116
    Referer:http://222.201.132.116/(wa4qm345dj1m5i55qectnu22)/default2.aspx
    User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2369.0 Safari/537.36

    __VIEWSTATE:dDwyODE2NTM0OTg7Oz5VGnjXV87Z19Dm3QbgRgvcptEYyA==
    txtUserName:(我的ID)
    TextBox2:(我的密码)
    txtSecretCode:xwcu
    RadioButtonList1:(unable to decode value)
    Button1:
    lbLanguage:
    hidPdrs:
    hidsc:

    主要是URL:http://222.201.132.116/(wa4qm345dj1m5i55qectnu22)/default2.aspx
    这个URL中间是什么加密方法啊? = =

    自己模拟登陆的代码:

    import urllib
    import urllib2
    import cookielib
    import re
    
    class SCUT:
    
        def __init__(self):
            self.loginUrl = '这里是Login的URL'
            self.cookies = cookielib.CookieJar()
            self.postdata = urllib.urlencode({
                'txtUserName:':'我的ID',
                'TextBox2':'我的密码'
             })
            self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
    
        def getPage(self):
            request  = urllib2.Request(
                url = self.loginUrl,
                data = self.postdata)
            result = self.opener.open(request)
            #打印登录内容
            print result.read().decode('gbk')
    
    
    scut = SCUT()
    scut.getPage()
    

    有大神知道如何解决吗?

    21 条回复    2015-04-19 21:42:01 +08:00
    binux
        1
    binux  
       2015-04-18 23:22:05 +08:00 via Android
    你有没有想过,如果“加密”了,浏览器是怎么登录的?
    decken
        2
    decken  
       2015-04-18 23:32:02 +08:00 via Android
    可以先获取被"加密"的登录URL
    NewYear
        3
    NewYear  
       2015-04-18 23:33:31 +08:00
    @binux 根本就没加密,先抓取一下/路径,就会跳转,数据都写在包头里了。
    lk09364
        4
    lk09364  
       2015-04-18 23:41:05 +08:00
    duplicate of /t/184559
    我这边 __VIEWSTATE 内容和你的一样,看来这个直接传回去就可以。
    Ghoul2005
        5
    Ghoul2005  
       2015-04-18 23:42:23 +08:00
    只要没有验证码,都没有任何障碍,只是多请求一两个页面而已。
    chaucerling
        6
    chaucerling  
       2015-04-18 23:44:25 +08:00
    请求的是frame的地址<frame src="http://jw2005.scuteo.com/">
    response header返回一个重定向的地址
    Location:/(gx4jp0repbkmkn45u5muqlqu)/Default.aspx
    chaucerling
        7
    chaucerling  
       2015-04-18 23:48:43 +08:00
    之后又两个重定向,真蛋疼
    Location:http://222.201.132.117/default2.aspx
    Location:/(bpkwxe55m0gnz23beiprl545)/default2.aspx
    RIcter
        8
    RIcter  
       2015-04-18 23:56:39 +08:00 via iPhone
    這教務系統有漏洞的_(:з」∠)_好像
    cxe2v
        9
    cxe2v  
       2015-04-19 00:00:57 +08:00
    @RIcter 教务系统基本都是漏洞一堆的
    wind3110991
        10
    wind3110991  
    OP
       2015-04-19 00:05:55 +08:00
    @NewYear 那应该怎么操作?
    wind3110991
        11
    wind3110991  
    OP
       2015-04-19 00:08:15 +08:00
    @lk09364 什么意思啊
    sb
        12
    sb  
       2015-04-19 00:12:37 +08:00
    那串东西是个session, 你提取出来给拼装上就好。
    lgh
        13
    lgh  
       2015-04-19 00:19:52 +08:00
    母校……
    trepwq
        14
    trepwq  
       2015-04-19 07:00:06 +08:00 via iPhone
    母校。。。
    oott123
        15
    oott123  
       2015-04-19 10:25:14 +08:00
    PhantomJS 大法好
    ccbikai
        16
    ccbikai  
       2015-04-19 12:36:12 +08:00 via iPhone
    去年做过一个这样的,没难度,代码搞丢了
    NewYear
        17
    NewYear  
       2015-04-19 13:11:40 +08:00
    @wind3110991 先用你的组件/插件/类/控件访问http://222.201.132.116/这个地址,但是要禁止跳转,然后获取HTTP头部的跳转信息Location这部分,就是你说的“加密”部分了啊。然后以后访问的网址部分,都带上这个,不就好了。
    welsmann
        18
    welsmann  
       2015-04-19 13:50:24 +08:00
    看路径就知道是正方.....
    bestie
        19
    bestie  
       2015-04-19 17:53:13 +08:00
    华南皇家理工大学, 轮子哥一个学校
    Comdex
        20
    Comdex  
       2015-04-19 20:43:28 +08:00
    @NewYear
    @wind3110991 17楼正解
    endoffight
        21
    endoffight  
       2015-04-19 21:42:01 +08:00 via Android
    http://202.200.112.200
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2859 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 07:02 · PVG 15:02 · LAX 23:02 · JFK 02:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.