目录
http/https是无状态协议
session会话对象
session对象模拟登陆
前期回顾,关于python基础知识以及爬虫基础我们可以看 ——> python学习手册,网络安全的小伙伴千万不要错过。
如下,当我们输入用户名密码进行登录的时候,浏览器向服务器发送了一个post请求,并携带了用户名、密码等参数。成功登录后服务器会进行一个302跳转并返回一个cookie值,此后每次发送请求都会携带这个cookie进行访问,代表我是这个已经登录的用户进行访问的
如登录失败则返回200,并且不会返回cookie值
但是如果按照之前这样requests.post(),直接发送登录请求。登录成功后再继续请求登录后的的页面是会不成功的,因为第二次发送的请求,服务器并不知道该请求是基于登录转态下的请求
http/https是无状态协议,即当我们向服务器端发送请求之后,服务器端并不会记录用户的状态,即当登录成功之后服务端并没有记录你登录成功与否的状态。而我们想要的是让服务器知道我们是已经登录后的一个状态,这样就能继续请求登录后的信息。
所以解决办法:
使用session会话对象无需手动添加cookie。其作用为
使用流程如下
import requests url = "http://192.168.43.206/2_Shotting_Range/bWAPP/bWAPP_here/login.php" data = { 'login': 'bee', 'password': 'bug', 'security_level': '0', 'form': 'submit', } # 1.创建session对象 session = requests.session() # 2.使用session对象进行请求发送 session.post(url,data=data) #对需登录之后才能访问的页面发送请求 url = "http://192.168.43.206/2_Shotting_Range/bWAPP/bWAPP_here/user_extra.php" text = session.get(url=url).text #验证是否请求成功 with open("ad.html",'w',encoding='utf-8') as f: f.write(text) print('ok')
打开文件后,发现请求的页面和原本的页面是一样的,说明基于session请求成功了
可以继续使用proxychains抓取python脚本数据
1. 登陆的数据包
2. 对登录后的页面发送get请求,此时可以看到自动携带上了cookie。并成功响应
欢迎小伙伴和我一起共同学习