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

目录

http/https是无状态协议

session会话对象

session对象模拟登陆


前期回顾,关于python基础知识以及爬虫基础我们可以看 ——> python学习手册,网络安全的小伙伴千万不要错过。

如下,当我们输入用户名密码进行登录的时候,浏览器向服务器发送了一个post请求,并携带了用户名、密码等参数。成功登录后服务器会进行一个302跳转并返回一个cookie值,此后每次发送请求都会携带这个cookie进行访问,代表我是这个已经登录的用户进行访问的

python模拟登录bwapp(不带图形验证码)_第1张图片

 如登录失败则返回200,并且不会返回cookie值

python模拟登录bwapp(不带图形验证码)_第2张图片

但是如果按照之前这样requests.post(),直接发送登录请求。登录成功后再继续请求登录后的的页面是会不成功的,因为第二次发送的请求,服务器并不知道该请求是基于登录转态下的请求

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 = {
    '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请求成功了

python模拟登录bwapp(不带图形验证码)_第3张图片

 可以继续使用proxychains抓取python脚本数据

1. 登陆的数据包

python模拟登录bwapp(不带图形验证码)_第4张图片

 2. 对登录后的页面发送get请求,此时可以看到自动携带上了cookie。并成功响应

python模拟登录bwapp(不带图形验证码)_第5张图片

 欢迎小伙伴和我一起共同学习

python模拟登录bwapp(不带图形验证码)_第6张图片

你可能感兴趣的:(python技术,python模拟登陆)