python技术|python模拟登录bwapp(不带图形验证码)

目录
http/https是无状态协议
session会话对象
session对象模拟登陆
前期回顾,关于python基础知识以及爬虫基础我们可以看 ——> python学习手册,网络安全的小伙伴千万不要错过。
如下,当我们输入用户名密码进行登录的时候,浏览器向服务器发送了一个post请求,并携带了用户名、密码等参数。成功登录后服务器会进行一个302跳转并返回一个cookie值,此后每次发送请求都会携带这个cookie进行访问,代表我是这个已经登录的用户进行访问的
python技术|python模拟登录bwapp(不带图形验证码)
文章图片

如登录失败则返回200,并且不会返回cookie值
python技术|python模拟登录bwapp(不带图形验证码)
文章图片

但是如果按照之前这样requests.post(),直接发送登录请求。登录成功后再继续请求登录后的的页面是会不成功的,因为第二次发送的请求,服务器并不知道该请求是基于登录转态下的请求
python技术|python模拟登录bwapp(不带图形验证码)
文章图片

http/https是无状态协议 http/https是无状态协议,即当我们向服务器端发送请求之后,服务器端并不会记录用户的状态,即当登录成功之后服务端并没有记录你登录成功与否的状态。而我们想要的是让服务器知道我们是已经登录后的一个状态,这样就能继续请求登录后的信息。
所以解决办法:

  • 手动cookie处理:即将登录之后的cookie值,封装在headers头中。比较麻烦!
  • 自动处理:session会话对象。
session会话对象 使用session会话对象无需手动添加cookie。其作用为
  • 可以进行请求的发送
  • 如果请求过程中产生了cookie,则该cookie会被自动存储/携带在该session对象中。即当成功登陆后,如果服务器返回了cookie值,则该cookie值会被自动封装在session会话中。接下来的请求都会携带这个cookie值
session对象模拟登陆 使用流程如下
  • 创建一个session对象:session = requests.session()
  • 使用session对象进行请求发送:session.get/post()
import requests url = "http://192.168.43.206/2_Shotting_Range/bWAPP/bWAPP_here/login.php"data = https://www.it610.com/article/{'login': 'bee', 'password': 'bug', 'security_level': '0', 'form': 'submit', } # 1.创建session对象 session = requests.session() # 2.使用session对象进行请求发送 session.post(url,data=https://www.it610.com/article/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请求成功了
python技术|python模拟登录bwapp(不带图形验证码)
文章图片

可以继续使用proxychains抓取python脚本数据
1. 登陆的数据包
python技术|python模拟登录bwapp(不带图形验证码)
文章图片

2. 对登录后的页面发送get请求,此时可以看到自动携带上了cookie。并成功响应
python技术|python模拟登录bwapp(不带图形验证码)
文章图片

欢迎小伙伴和我一起共同学习
【python技术|python模拟登录bwapp(不带图形验证码)】python技术|python模拟登录bwapp(不带图形验证码)
文章图片

    推荐阅读