Python获取Cookie时遇到重定向的情况

问题描述和解决:

在模拟登录教务处的时候,需要通过获取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()
Python中,模拟登录网站并处理重定向通常涉及到使用一些HTTP客户端库,比如requests库。当你尝试通过requests发送POST请求来进行登录,如果服务器返回了HTTP状态码3xx(如302 Found或301 Moved Permanently),这通常是表示需要重定向。以下是处理这种场景的一般步骤: 1. **设置代理** (如果有必要):某些网站可能会对IP进行限制,这你可以设置一个代理服务器来绕过。 ```python proxies = {'http': 'http://your_proxy', 'https': 'https://your_proxy'} ``` 2. **构造登录请求**: - 使用`requests.post()`方法,并提供登录页面URL、表单数据(包括用户名、密码等)。 ```python login_data = { 'username': 'your_username', 'password': 'your_password' } response = requests.post('http://login_url', data=login_data, allow_redirects=False, proxies=proxies) ``` `allow_redirects=False`是为了不让requests自动处理重定向。 3. **检查响应状态码**: - 如果状态码不是200(成功),而是30x,那么就是重定向。 - 获取新的Location头信息,它是重定向的目标地址。 ```python if response.status_code == 302 or response.status_code == 301: redirect_url = response.headers['Location'] # 然后继续请求这个新地址 redirected_response = requests.get(redirect_url, allow_redirects=True, proxies=proxies) ``` 4. **处理登录后的状态**: - 检查是否已经登录成功,例如查看是否有预期的cookie存在,或者页面内容发生了变化。 5. **异常处理**: - 当然,还要记得处理可能出现的各种网络错误或其他异常情况
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值