【Python_requests学习笔记(十)】基于requests模块实现Cookie模拟登录

基于requests模块实现Cookie模拟登录

前言

此篇文章中介绍基于 requests 模块实现 Cookie 模拟登录,并以模拟登录cocos中文社区(https://forum.cocos.org/)的个人登录页为例进行讲解。

正文

1、Cookie 和 Session

1.1、Cookie

Cookie :类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session 跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息 ;Cookie 可以保持登录信息到用户下次与服务器的会话; 以键 / 值对形式存储。

1.2、Session

Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。

1,3、Cookie 和 Session 的区别

  1. Cookie 存储在客户的浏览器上,Session 存储在服务器上。
  2. Cookie 是不安全的,且有失效时间。

2、模拟登录的三种方法

2.1、利用headers参数,将手动抓取的 Cookie 放到 headers 参数中

   headers={
        "Cookie":"手动抓取的 Cookie ",
        "User-Agent":""  
   }
   html=request.get(url=url,headers=header).text

2.2、利用 get() 方法中的 cookies 参数

需要先将通过外部浏览器抓取的 cookies 参数 处理为字典

cookies = get_cookies() # get_cookies() :处理字符串形式的cookies为字典类型
html=requests.get(url=url,headers=headers,cookies=cookies)

2.3、利用 requests.session() 类实现模拟登录

我们知道 Cookie 是不安全的,且有失效时间,所以 requests 模块提供了 session 类,来实现客户端和服务端的会话保持。

  1. requests.session() 类实现模拟登录的原理:
    • 浏览器原理:访问需要登录的页面会带着之前登录过的 cookie;
    • 程序原理:同样带着之前登录的 cookie 去访问-由 session 对象完成;
  2. requests.session() 类实现模拟登录的具体步骤:
    • 登录页输入错误的密码抓包,抓到向服务器的哪个地址发送了哪些数据进行的验证;
    • 在网络数据包中找到具体的提交用户名和密码信息的地址,一般为 POST 请求;
    • 将正确的用户名和密码信息 POST 到网络数据包的 url 地址;
    • 模拟浏览器利用 session 对象发送请求先验证登录;
    • 一旦登录成功,可以抓取任何需要登录才能访问的页面。
  3. requests.session() 类实现模拟登录的使用方法:
    • 实例化 session 对象:s=requests.session()

    • 登录网站:由session对象发送get或者post请求,登录对应网站:

      res=s.get(url=url,headers=headers)
      
      res=s.post(url=url,headers=headers,data=data)
      
    • 访问页面:由session对象请求需要登录才能访问的页面

      html = s.get(url=url, headers=headers).text
      

3、模拟登录示例

3.1、利用 headers 参数,将手动抓取的 Cookie 放到 headers 参数中

  1. 通过 F12 - 全部 - summary - 标头 - 常规 -请求网址,获取 url 地址
    在这里插入图片描述

  2. 再获取 Cookie 参数,直接复制到代码段中
    在这里插入图片描述

  3. 代码实现:

    def login1():
        """
        function:  利用Cookie模拟登录Cocos中文社区:利用headers参数,将手动抓取的Cookie放到headers参数中
              in:  None
             out:  None
          return:  None
          others:  Login Simulation Cocos Chinese Comunity By Cookie
        """
        url = "https://forum.cocos.org/u/xxx/summary"  # 通过网络数据包获取的url地址
        headers = {
            'User-Agent': UserAgent().random,
            'Cookie': 'xxx'
        }  # 填充headers
        html = requests.get(url=url, headers=headers).text  # 通过requests.get() 方法获取响应内容
        print(html)  # 打印响应内容
    
  4. 程序运行效果如下:
    在这里插入图片描述

3.2、利用 get() 方法中的 cookies 参数

获取 cookies 参数的方法 与 3.1 方法相同,区别是需要写一个 将字符串形式的 cookies 参数 转化为 字典类型 的函数。

def login2():
    """
    function:  利用Cookie模拟登录Cocos中文社区:get()方法中的cookies参数
          in:  None
         out:  None
      return:  None
      others:  Login Simulation Cocos Chinese Comunity By Cookie
    """
    url = "https://forum.cocos.org/u/xxx/summary"  # 通过网络数据包获取的url地址
    headers = {'User-Agent': UserAgent().random}  # 填充headers
    cookies = get_cookies() #处理字符串形式的cookies为字典类型
    html = requests.get(url=url, headers=headers, cookies=cookies).text  # 通过requests.get() 方法获取响应内容
    print(html)  # 打印响应内容


def get_cookies():
    """
    function:  功能:处理字符串形式的cookies为字典类型
          in:  None
         out:  None
      return:  字典类型的cookies
      others:  Convert String To Dic
    """
    cookies = {}
    cookies_string = 'xxx'
    for kv in cookies_string.split('; '):
        key = kv.split('=')[0]
        value = kv.split('=')[1]
        cookies[key] = value
    return cookies

3.3、利用 requests.session() 类实现模拟登录

  1. 步骤1:实例化session对象

    s = requests.session()  # 实例化全局的session对象
    
  2. 步骤2:登录网站:由session对象发送get或者post请求,登录对应网站
    在这里插入图片描述
    通过网络数据包获取的表单数据即使网页向服务器提交的用户名和密码

        post_url = "https://auth.cocos.com/jsApi/doSignIn"  # 通过F12,网络数据包抓包抓到的验证登录的url地址
        headers = {
            'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0"}  # 填充headers,有些网站第一次也需要带着cookie参数
        form_data = {
            "username": "xxx",
            "password": "xxx",
            "autoLogin": "true"
        }
        # 1、先登录
        s.post(url=post_url, headers=headers, data=form_data)  # 利用session对象登录,相当于登录成功
    

    注意:在利用 session 对象登录时,url 地址 是验证登录页面的 url 地址!

  3. 步骤3:访问页面:由session对象请求需要登录才能访问的页面

    url = "https://forum.cocos.org/u/xxx/summary"  # 通过网络数据包获取的带有个人信息登录的url地址
    html = s.get(url=url, headers=headers).text  # 通过requests.get() 方法获取响应内容
    

    注意:在获取对应页面的响应内容时,url 地址 是通过网络数据包获取的带有个人信息登录的 url 地址!

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python模拟登录通常使用requests库来实现,以下是三种常见的方式: 1. 基于session登录方式 ```python import requests # 创建session对象 s = requests.Session() # 登录接口 login_url = "http://example.com/login" # 请求参数 data = { "username": "your_username", "password": "your_password" } # 登录 s.post(login_url, data=data) # 访问需要登录才能访问的页面 response = s.get("http://example.com/profile") ``` 2. 基于cookie登录方式 ```python import requests # 登录接口 login_url = "http://example.com/login" # 请求参数 data = { "username": "your_username", "password": "your_password" } # 登录 response = requests.post(login_url, data=data) # 获取cookie cookie_dict = response.cookies.get_dict() # 使用cookie访问需要登录才能访问的页面 response = requests.get("http://example.com/profile", cookies=cookie_dict) ``` 3. 基于token的登录方式 ```python import requests # 登录接口 login_url = "http://example.com/login" # 请求参数 data = { "username": "your_username", "password": "your_password" } # 登录 response = requests.post(login_url, data=data) # 获取token token = response.json().get("token") # 设置header中的Authorization字段 headers = { "Authorization": f"Bearer {token}" } # 使用token访问需要登录才能访问的页面 response = requests.get("http://example.com/profile", headers=headers) ``` 以上三种方式都可以实现模拟登录,具体使用哪种方式取决于登录接口的实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

禾戊之昂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值