python模拟登陆遇到重定向_python爬虫模拟登陆urllib2重定向问题?

这几天尝试用python模拟登陆,用的是urllib2库,在网上学了一个人人网登陆的,就是post数据到action页面,拿到cookie,然后再用这个cookie访问主页,感觉很简单,也没有关注背后的细节,但是我又用这个套路模拟登陆我们学校的一个网站时却出了问题,同样的步骤,最后却不能访问登陆后的页面,我查看了中间的过程,用wireshark比较了模拟登陆和正常登陆的区别

下文中:

登录页面:需要输入用户名和密码的界面

action页面:form表单提交的页面

主页:登陆成功后的主页

正常手动登陆时:

在浏览器中手动输入用户名密码,登陆成功,报文:

报文1发送一个post请求,请求中携带用户名密码,和cookie,

cookie为浏览器打开登陆页面后立刻得到的:

一条是无名cookie,值是10006(总是这个值),一条PHPSESSID

报文2应答302,给了一个地址是/cloud/studentindex.php?type=booking,这个地址即是登陆成功后的主页,这时已经登陆成功了

报文3请求这个新地址,第四条报文应答主页的html内容

用urllib2的脚本登陆:

代码:

cj = cookielib.CookieJar()

opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

opener.addheaders = [('User-agent','Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0')]

data = urllib.urlencode({"studentno":user,"studentpassword":password,"btnlogin":"登  录"})

opener.open("http://202.112.131.80/cloud/index.php?type=student",data)

op=opener.open("http://202.112.131.80/cloud/studentindex.php?type=booking")

(代码中user和password是字符串)

报文(登录失败):

报文1向action页面发送用户名和密码,

报文2返回302应答,重定向的地址还是登陆页面。应答中的cookie:

报文3是urllib2自动带cookie重定向,访问登陆页面

报文4应答访问成功

报文5是尝试访问主页,结果直接被重定向到loginout,没有登录成功

上面这些请求报文,每次都带着cookie,但是只有PHPSESSID一项,没有10006那项

我手动登陆就有10006cookie,用urllib2就没有

查看了网页源码,有一句:

然后我自己把10006手动加入cookie,也登录失败

我还尝试了用httplib2,先GET访问登录界面,但是得到的cookie也没有10006这项。我手动加入10006,再POST了action页面,还是登录失败

网上有人说urllib2重定向丢失cookie,其实并没有,我在登陆人人的时候用wireshark看过了,正常手动登陆直接就能上,脚本登陆需要几次重定向,但每次都是自带cookie,而且最后登陆成功了。

说了这么多,我有几个问题:

1、为什么手动登录重定向很少,脚本登录会有重定向?

2、为什么一样的步骤,人人能登录上,学校的那个网站不行?

3、为什么手动登陆的cookie是PHPSESSID和10006,但是脚本得到的是PHPSESSID和path?

4、为什么能有名称是空的cookie?新建cookie名是不能为空的,除非用字符串新建,自动解析。而且10006这个cookie有个参数叫“路径”,值是“/cloud”,这个信息有用吗

python小白一枚,大家帮个忙啊。在网上查了好几天没找到解决方法,随便说几句也行,我现在实在不知道问题出在哪了。要是需要其他更详细的信息,可以问我。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值