基于 JWT 的模拟登录爬取实战

news2024/11/14 20:51:41

准备工作

1. 了解 JWT 相关知识

2. 安装 requests 库,并了解其基本使用

案例介绍

爬取网站: https://login3.scrape.center/

用户名和密码是: admin

模拟登录

基于 JWT 的网站通常采用的是前后端分离式, 前后端的数据传输依赖于 Ajax , 登录验证依赖于 JWT 这个本事就是 token 的值, 如果 JWT 经验证是有效的, 服务器就会返回相应的数据。

打开开发者工具,执行登录操作,,查看登录过程产生的数据

可以看出,登录时的请求 URL 为https://login3.scrape.center/api/login ,是通过 Ajax 请求的, 请求体式 JSON 格式的数据, 而不是表单数据, 返回状态码为 200 

来看一下 token 字段

token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzIyOTYwOTk4LCJlbWFpbCI6ImFkbWluQGFkbWluLmNvbSIsIm9yaWdfaWF0IjoxNzIyOTE3Nzk4fQ.qkSWgwMI_0MJs7U5y1bAaUyQW17O09i_f5s7E0C1GVc"

由 . (点) 把整个字段分为 3 部分,Header , Payload 和  Signature, 具体介绍在上一节

写文章-CSDN创作中心

而在后续发出用于获取数据的 Ajax 请求中, 请求头里多了一个 authorization 字段, 其内容为 jwt 加上刚才的 token 字段, 返回结果也是 JSON 格式的数据,其内容也是网站首页内容,那么现在模拟登录的思路也就有了

1. 模拟登录请求,带上必要的信息, 获取返回的JWT

2. 之后发送请求时, 在请求头里面加上 authorization 字段, 值就是 JWT 对应的内容

import requests
from urllib.parse import urljoin

BASE_URL = 'https://login3.scrape.center/'
LOGIN_URL = urljoin(BASE_URL, '/api/login')
INDEX_URL = urljoin(BASE_URL, '/api/book')
USERNAME = 'admin'
PASSWORD = 'admin'

response_login = requests.post(LOGIN_URL, json={
    'username': USERNAME,
    'password': PASSWORD
})

data = response_login.json()
print('Response JSON', data)
jwt = data.get('token')
print('JWT', jwt)

headers = {'Authorization': f'jwt {jwt}'}
response_index = requests.get(INDEX_URL, params={
    'limit': '18',
    'offset': 0,
}, headers=headers)
print('Response Index', response_index.status_code)
print('Response URL', response_index.url)
print('Response Data', response_index.json())

Response JSON {'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzIyOTcyMjg2LCJlbWFpbCI6ImFkbWluQGFkbWluLmNvbSIsIm9yaWdfaWF0IjoxNzIyOTI5MDg2fQ.ac63vnW9JF7U6DoZgIJd0dmqLc9FchrI_GbjDWjLZas'}
JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzIyOTcyMjg2LCJlbWFpbCI6ImFkbWluQGFkbWluLmNvbSIsIm9yaWdfaWF0IjoxNzIyOTI5MDg2fQ.ac63vnW9JF7U6DoZgIJd0dmqLc9FchrI_GbjDWjLZas
Response Index 200
Response URL https://login3.scrape.center/api/book/?limit=18&offset=0
Response Data {'count': 9200, 'results': [{'id': '34473697', 'name': 'R数据科学实战:工具详解与案例分析

这里我们先定义了登录接口和获取数据的接口,分别是 LOGIN_URL 和 INDEX_URL, 接着调用 requests 的 post 方法进行了模拟登录。 由于这了提交的数据是 JSON 格式, 所以使用 json 参数来传递数据。接着获取并打印出了返回结果中包含的 JWT 。 之后构造请求头, 设置  Authorization 字段并传入刚获取的 JWT , 这样就成功获取数据了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++高阶】:自定义删除器的全面探索

✨ 我凌于山壑万里,一生自由随风起 🌏 📃个人主页:island1314 🔥个人专栏:C学习 🚀 欢迎关注:👍点赞 👂&am…

观测维度过大的一种ceres求解优化思路

详见 文章 这个优化如此重要,以至于需要单列一个文章。 使用场景: 比如lidar SLAM中优化点到面的距离,如果多个点关联到同一个面,那么就可以利用矩阵批量运算,假如有N个点,那么可以用一个factor来代替N个f…

【MYSQL】表操作

目录 查看当前数据库含有表查看表结构创建表插入(新增create)查询(retrieve)全列查询指定列查询查询列是表达式别名查询(as)去重查询(distinct)排序查询(order by)条件查询(where)比较/逻辑运算符使用 分页查询(limit) 一条语句各…

微服务-实现nacos的集群和Gateway网关的实现、认证校验、解决跨域

1. nacos的集群模式 1.1 分析 nacos在企业中的使用100%都是集群模式。需要掌握nacos集群的搭建 nacos的数据存放在derby本地磁盘中,nacos集群模式会导致数据库数据不一致,使用加一层思想,修改nacos的数据库,使用mysql数据库&…

kafka producer metrics

背景 做online Service埋点设计,塞了很多节点,采用了base64压缩,希望能监控当前消息的大小,防止超过threshold后无法正常发送。 kafka基本架构 producer metrics 官方文档 其中有两个参数用来表征在kafka的producer的client里&…

鸿蒙AI功能开发【hiai引擎框架-主体分割】 基础视觉服务

hiai引擎框架-主体分割 介绍 本示例展示了使用hiai引擎框架提供的主体分割能力。 本示例模拟了在应用里,选择一张图片,识别其图片中的显著性主体并展示出来主体的边界框的数据。 需要使用hiai引擎框架通用文字识别接口hms.ai.vision.subjectSegmenta…

加密软件有哪些常见的安全特性

1. 数据加密 核心功能:加密软件的核心在于对数据进行加密处理,通过复杂的加密算法(如AES、RSA等)将明文数据转换为密文,确保数据在存储和传输过程中的安全性。 透明加密:部分加密软件支持透明加密功能&am…

函数实例讲解(六)

文章目录 如何加密电话号码?(SUBSTITUTE、REPLACE)1、SUBSTITUTE2、REPLACE 用REPT函数做图表学生的考试成绩用A、B、C表示,如何找出哪个等级的学生最多呢?(CHAR、CODE、MODE)1、CHAR2、CODE3、…

【数据结构】顺序结构实现:特殊完全二叉树(堆)+堆排序

二叉树 一.二叉树的顺序结构二.堆的概念及结构三.堆的实现1.堆的结构2.堆的初始化、销毁、打印、判空3.堆中的值交换4.堆顶元素5.堆向上调整算法:实现小堆的插入6.堆向下调整算法:实现小堆的删除7.堆的创建1.堆向上调整算法:建堆建堆的时间复…

使用Go语言绘制折线统计图教程

使用Go语言绘制折线统计图教程 在本教程中,我们将学习如何使用Go语言及gg包绘制折线统计图,并将图表保存为PNG格式的图片。折线图适用于展示数据的变化趋势,并能直观地展示数据随时间或其他指标的变化。 安装gg包 首先,确保你已…

⌈ 传知代码 ⌋ 改进表情识别

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

Unity入门2——编辑器常用功能

点击文件夹,右键,选择showInExplorer可以在文件管理器中打开 选中多个图片素材,在Inspector里将Texture Type设置为Sprite(2D and UI)即可将图片素材用于UI 右键Hierachy面板的空白区,点击UI->Panel可以创建UI面板&#xf…

GPT-SoVITS-文本转语音(你的声音不再是唯一)

本文将要介绍GPT-SoVITS的安装和使用方法 首先感谢花儿不哭大佬带来的RVC声音克隆 花儿不哭: 花儿不哭的个人空间-花儿不哭个人主页-哔哩哔哩视频 (bilibili.com) GPT-SoVITS下载地址 GitHub - RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a …

网络药理学:分子对接之pocasa/proteins.plus/Deepsite网站预测蛋白口袋

前言 配体的结合需要疏水作用,通常来说,疏水性空腔(开口小、肚子大、能容纳一定体积的分子结构)更有可能成为口袋。当我们复现网络药理学文章时可能经过前面的筛选,依旧有数个乃至数十个蛋白需要做分子对接验证。此时如…

算法——动态规划:基础

文章目录 一、基本介绍二、案例——斐波那契数列1. 基本介绍2. 递归实现3. 动态规划3.1 重叠子问题3.2 最优子结构3.3 无后效性3.4 性质的总结 4. 使用 动态规划 的思想实现4.1 自顶向下 的 递归4.2 自底向上 的 递推4.3 两种思路的简单比较 三、总结 一、基本介绍 动态规划&a…

python语言day4 函数 生成器yield、next关键字 装饰器

一、 函数 定义: def info(): print("执行info()函数") 直接调用方法和封装一个函数: 使用信息发送的功能为例 登录163网易免费邮-你的专业电子邮局 1)开启POP3/SMTP服务,会得到对应的授权码,也就是登陆…

2024年旗舰骨传导耳机大对比:南卡、韶音和墨觉,哪款最值得购买?

作为专注于数码产品的博主,我对骨传导耳机的迅猛发展深有感触。这类耳机以其与众不同的技术和设计风格,成功捕捉了消费者的兴趣。它们独特的工作原理不仅保留了使用者对周围环境的感知,还能提供清晰的音乐播放和通话体验,特别适合…

第三方软件检测机构服务类型

在信息技术飞速发展的今天,软件产品的质量已成为企业竞争力的重要组成部分。卓码软件测评这家第三方软件检测机构致力于提供一流的软件测试服务,帮助企业确保其软件产品的可靠性和安全性。 一、项目验收测试:确保交付质量   项目验收测试是…

力扣-240.搜索二维矩阵(2)

刷力扣热题–第二十七天:240.搜索二维矩阵(2) 新手第二十七天 奋战敲代码,持之以恒,见证成长 1.题目简介 2.题目解答 这道题的想法就是,整体遍历,在遇到比target还大的,就停止这行的遍历,然后转过去继续遍历下一行,如果有一行的开头大于target,直接返回…

嘉盛平台的代理返佣机制:一份详细的说明书

在金融市场合作模式的多样性中,嘉盛平台的代理返佣机制无疑是一个引人注目的亮点。想了解更多关于嘉盛平台的代理返佣机制吗?本文将为您详细解答。嘉盛开户MT4平台开户链接 :https://application.jszhanghao.com/cn-meta/step/1?ibcodeFXAMM…