正在做一个给同学用的微信信息平台,遇到了一点爬网页和登录相关的问题 - V2EX
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 5519 次点击
    这是一个创建于 4660 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好!我想做一个微信信息平台,就是大家通过微信发命令,输入自己的帐号密码后,可以得到学校教辅系统上的信息,
    我们学校教辅系统的大概逻辑是:首先在一个登录页面进行登录后,进入到一个管理平台(第一个系统),目前我已经实现了获取这个管理平台的信息,在管理平台中有一个链接,点击后进入教辅系统(第二个系统)(不需要二次登录)。
    我用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地址,带上这个cokie,也不行
    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     Solana     1262 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 17:18 PVG 01:18 LAX 09:18 JFK 12:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86