V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
inccinf
V2EX  ›  Python

正在做一个给同学用的微信信息平台,遇到了一点爬网页和登录相关的问题

  •  
  •   inccinf · 2013-03-24 19:44:25 +08:00 · 5013 次点击
    这是一个创建于 4261 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好!我想做一个微信信息平台,就是大家通过微信发命令,输入自己的帐号密码后,可以得到学校教辅系统上的信息,
    我们学校教辅系统的大概逻辑是:首先在一个登录页面进行登录后,进入到一个管理平台(第一个系统),目前我已经实现了获取这个管理平台的信息,在管理平台中有一个链接,点击后进入教辅系统(第二个系统)(不需要二次登录)。
    我用firefox的httpfox跟踪了一下,并且用poster模拟。经过分析我发现,这个教辅系统(也就是第二个系统)的登录方式貌似是在链接后加一个usid参数,根据我测试,在不登陆第一个管理系统的情况下,直接访问教辅系统的连接加usid参数也是可以的,httpfox分析如下:

    1、在登录第一个管理平台后,点击其中的教辅系统链接


    2、这个POST请求会返回我所说的那个带usid的链接,如下:


    3、GET请求上面那个链接


    4、得到302重定向 **


    5、访问那个重定向地址 **



    6、至此,过程完了,会返回正确的页面

    现在我遇到的问题是,在第4步和第5步中,访问那个302地址时,系统是怎么验证我的登录情况的?我使用firefox的poster直接GET那个带usid的链接(步骤3),是可以返回给我正确页面的,貌似自动处理了重定向,但是我在PYTHON中用urllib2请求的时候,返回的却是登录页面,该怎么处理啊?
    。。。我有点糊涂,再加上本来就是个菜鸟,希望大家帮我分析下。。。。非常感谢!
    21 条回复    1970-01-01 08:00:00 +08:00
    fanwei
        1
    fanwei  
       2013-03-24 19:51:12 +08:00
    没有处理cookie
    要记录cookie
    inccinf
        2
    inccinf  
    OP
       2013-03-24 19:55:38 +08:00
    @fanwei 可是貌似没有COOKIE啊。。。访问那个302地址时,您可以看到cookie只有一个ASP.NET_SessionId=....,这个首先我不知道从哪里来的,其次,我用poster直接访问302地址,带上这个cookie,也不行
    swulling
        3
    swulling  
       2013-03-24 20:10:35 +08:00
    @inccinf
    1. session id每个会话都是不同的,带上上一次的当然不行
    2. cookie不可能不知道从哪里来的
    inccinf
        4
    inccinf  
    OP
       2013-03-24 20:14:31 +08:00
    @swulling 那也就是说这个session id是关键?我只要在处理的时候带上这次会话的session id进行重定向,就可以了?谢谢
    swulling
        5
    swulling  
       2013-03-24 20:25:27 +08:00
    @inccinf 每个请求都有request cookie和response cookie,找下cookie在哪里引用的。
    然后我建议用requests库,可以非常方便的处理session问题,而且还能复用。

    我用了requests后再也不和cookie打交道了。


    inccinf
        6
    inccinf  
    OP
       2013-03-24 20:27:55 +08:00
    @swulling 好的,谢谢,我试下requests库,顺便问下,你这个分析工具是什么?貌似很厉害的样子
    swulling
        7
    swulling  
       2013-03-24 20:29:48 +08:00   ❤️ 1
    @inccinf chrome 自带的 Develop Tools
    parkman
        8
    parkman  
       2013-03-24 20:54:02 +08:00
    requests lib 自带处理cookies
    cloverstd
        9
    cloverstd  
       2013-03-24 20:54:22 +08:00 via Android
    同学,微信只有 5s 响应时间,你是如何做的呢?
    inccinf
        10
    inccinf  
    OP
       2013-03-24 21:08:31 +08:00
    @parkman 这个库是不错,可是不知道能否在SAE上用。。
    inccinf
        11
    inccinf  
    OP
       2013-03-24 21:09:19 +08:00
    @cloverstd 5s貌似足够了啊。。响应非常迅速,主要我们学校的网站访问比较快吧
    inccinf
        12
    inccinf  
    OP
       2013-03-24 21:14:08 +08:00
    @cloverstd 对了,如果时间不够的话,不知道能否在处理完后直接POST到微信的那个服务器地址上,按照微信那个响应XML,那个toUserId是一个唯一固定的OpenId,不知道你有没有试过。。你可以试下
    cloverstd
        13
    cloverstd  
       2013-03-24 21:41:47 +08:00
    @inccinf 我们学校网站 5s 不够,用户同时查询,并发的时候更加不够了
    不能主动 POST
    inccinf
        14
    inccinf  
    OP
       2013-03-24 22:18:10 +08:00
    @cloverstd 那真不好解决。。
    red
        15
    red  
       2013-03-25 10:07:13 +08:00
    @inccinf
    恰好之前做过~
    当时5S的问题也困扰了一下,我们用阿里云的服务器,整个模拟登录+验证码机器识别需要3S-4S,除非把服务器放到学校的机房,否则确实不怎么好搞。
    后来想出的解决方案是,第一次查询的时候,先打开网页绑定学号,绑定成功马上缓存数据到本地。这次不返回成绩 ,之后再发送查询,就从本地读取数据~
    red
        16
    red  
       2013-03-25 10:09:49 +08:00
    另外,建议楼主使用requests( http://docs.python-requests.org/en/latest/ ),比urllib2更加适合人类使用~
    txx
        17
    txx  
       2013-03-26 05:24:35 +08:00
    @red
    @cloverstd 我想问 你们都是怎么处理用户密码传输问题的...直接明文写在wechat里面么?这样做是不是太不专业了?
    red
        18
    red  
       2013-03-26 10:22:06 +08:00
    @txx 打开网页绑定。虽然其实一码事,但是输密码好歹还有个*号,看上去略微好一点~
    另外,如果你要保存密码(估计也是要了),服务器安全一定要保证~
    inccinf
        19
    inccinf  
    OP
       2013-03-26 11:15:25 +08:00
    @txx 我直接写明文了,是不专业,可是学校的系统对密码也是直接明文传输,所以微信这边做加密也没有什么大用
    txx
        20
    txx  
       2013-03-27 13:27:51 +08:00 via iPhone
    @inccinf 要考虑到别人拿走手机的情况

    @red 等于是写oauth那样了?
    red
        21
    red  
       2013-03-28 15:05:57 +08:00
    @txx 不一样。学校没有oauth(上交有!羡慕死!这就是差距啊!)
    提交的信息是保存在我服务器的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2864 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:13 · PVG 17:13 · LAX 01:13 · JFK 04:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.