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

2013-03-24 19:44:25 +08:00
 inccinf
大家好!我想做一个微信信息平台,就是大家通过微信发命令,输入自己的帐号密码后,可以得到学校教辅系统上的信息,
我们学校教辅系统的大概逻辑是:首先在一个登录页面进行登录后,进入到一个管理平台(第一个系统),目前我已经实现了获取这个管理平台的信息,在管理平台中有一个链接,点击后进入教辅系统(第二个系统)(不需要二次登录)。
我用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请求的时候,返回的却是登录页面,该怎么处理啊?
。。。我有点糊涂,再加上本来就是个菜鸟,希望大家帮我分析下。。。。非常感谢!
5012 次点击
所在节点    Python
21 条回复
fanwei
2013-03-24 19:51:12 +08:00
没有处理cookie
要记录cookie
inccinf
2013-03-24 19:55:38 +08:00
@fanwei 可是貌似没有COOKIE啊。。。访问那个302地址时,您可以看到cookie只有一个ASP.NET_SessionId=....,这个首先我不知道从哪里来的,其次,我用poster直接访问302地址,带上这个cookie,也不行
swulling
2013-03-24 20:10:35 +08:00
@inccinf
1. session id每个会话都是不同的,带上上一次的当然不行
2. cookie不可能不知道从哪里来的
inccinf
2013-03-24 20:14:31 +08:00
@swulling 那也就是说这个session id是关键?我只要在处理的时候带上这次会话的session id进行重定向,就可以了?谢谢
swulling
2013-03-24 20:25:27 +08:00
@inccinf 每个请求都有request cookie和response cookie,找下cookie在哪里引用的。
然后我建议用requests库,可以非常方便的处理session问题,而且还能复用。

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


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

@red 等于是写oauth那样了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/63912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX