问题描述和解决:

在模拟登录教务处的时候,需要通过获取cookie来进行后面一系列操作。

但是刚开始,python模拟登录一直失败,提示的没权限。通过网页抓包分析,最后看到每次输入地址进行登录时候,会发生302重定向,重定向后的地址和原来一样,但是会在地址后面传入一段随机值。

通过Burpsuite抓包查看每次登录请求头部信息,提交的Cookie有两个字段。在以前的时候一直是 :Cookie: JSESSIONID=gde7KUAgMlZ-zdMkvOjGw一个字段,但是通过抓包分析,每次在重定向的时候也会添加一个字段,而这个cookie字段是通过浏览器随机生成的。

所以想到的解决思路是,是否可以通过抓取两个cookie字段,来进行模拟登录。但是正常通过request请求,只能得到一个Cookie。

最后,通过在request库请求的时候,加入一个参数:allow_redirects=False ,来禁止网页进行302重定向,从而成功的获取了第一个cookie字段,再利用获取到的这个cookie字段,以及获取到的url,重新封装请求头部。重新进行了网页请求,从而获取了第二个cookie字段。通过抓分分析,将获取的两个cookie字段,进行了拼接成为一个字符串。将新的cookie进行了封装到请求头信息,从而提交账号密码等信息,从而成功实现了登录。以及后面获得了各种想要的信息。

但是现在,教务处系统经过修改,302重定向又没有了,只需要正常请求一次就可以获取一个字段的cookie。

实例代码:

zjh = self.get_body_argument('zjh')
        mm  = self.get_body_argument('mm')
        postdata = {
        'evalue' : '',
        'zjh1' :'',
        'zjh' : zjh,
        'fs' : '',
        'v_yzm' : '',
        'lx' : '',
        'mm' : mm,
        'eflag' : '',
        'dzslh' : '',
        'tips' : ''
        }
        # 禁止网页自己进行重定向
        r = requests.get('http://211.82.47.7',  allow_redirects=False)
        # 获取第一个字段的cookie
        cookie1 = r.headers['Set-Cookie']
        #print(cookie1)
        # 重新封装请求头部
        head1 = {'Cookie':cookie1}
        # 利用封装好的头部,重新请求网页
        r1 = requests.get(r.url, headers = head1)
        # 获取cookie的第二字段
        cookie2 = r1.headers['Set-Cookie']
        #print(cookie2)
        # 拼接cookie字段
        cookie = cookie1 + ';' + cookie2
        #print(cookie)
        head = {  #封装新的请求头部
        'Proxy-Connection':'keep-alive',
        'Content-Length': '75',
        'Cache-Control': 'max-age=0',
        'Origin': 'http://211.82.47.7',
        'Upgrade-Insecure-Requests': '1',
        'Content-Type': 'application/x-www-form-urlencoded',
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Referer': 'http://211.82.47.7/',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cookie': cookie
        }
        # 利用获取的cookie成功实现了登录
        res = requests.post('http://211.82.47.7/loginAction.do', data = postdata, headers=head)
        res.close()