猿人学第3题-访问逻辑 - 推心置腹分析

2023-11-08

3-访问逻辑 - 推心置腹分析

1、 请求页面并进行抓包

https://match.yuanrenxue.cn/match/3

image-20230427151428553


2、对抓包进行分析

判断发现每次数据请求前先请求 https://match.yuanrenxue.cn/jssm

image-20230427151520069

分析参数发现这链接会返回一个 sessionid,

image-20230427151744957

数据请求的 cookie 中会带上这个 sessionid,判断该参数为重要参数

image-20230427151822080

3、请求链接获取 sessionid

https://match.yuanrenxue.cn/jssm

将抓包中的信息写成 Python 代码,但是发现请求后的 cookie 值为空

image-20230427164702705

考虑问题可能出现在 headers 的参数中,多次组合参数,cookie 值还是为空

搜索后发现还有一种可能,服务器端对 headers 的参数顺序进行了验证,因为 requests 在发起请求时会对 headers 参数进行排序,Python 的字典是无序的

现在需要将 headers 的参数顺序固定

采用了如下的方法:

import requests

session = requests.session() 
# 使用 session 来保持 headers 的顺序不会改变
session.headers.clear()
session.headers.update(headers)

resp = session.post(url)
cookies = resp.cookies
cookie = requests.utils.dict_from_cookiejar(cookies)
print(cookie)
return cookie

修改后成功获取 cookie 中的 sessionid

{'sessionid': 'nunhqjqjhq6anqpfxdbq9bu9iubqw5gt'}

4、最终结果

Python 代码

#!/usr/bin/env python 
# -*- coding: utf-8 -*-
# @Time    : 2023/4/27 14:14
# @Author  : QYF
# @File    : 3.py
from collections import Counter

import requests

session = requests.session()

def get_sessionid():
    url = "https://match.yuanrenxue.cn/jssm"
    headers = {
        "Host": "match.yuanrenxue.cn",
        "Connection": "keep-alive",
        "Content-Length": "0",
        "sec-ch-ua": "\"Chromium\";v=\"112\", \"Google Chrome\";v=\"112\", \"Not:A-Brand\";v=\"99\"",
        "sec-ch-ua-mobile": "?0",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
        "sec-ch-ua-platform": "\"Windows\"",
        "Accept": "*/*",
        "Origin": "https://match.yuanrenxue.cn",
        "Sec-Fetch-Site": "same-origin",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Dest": "empty",
        "Referer": "https://match.yuanrenxue.cn/match/3",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cookie": "Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1682492258,1682492748,1682496325; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1682496325,1682575933; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1682575951; sessionid=nunhqjqjhq6anqpfxdbq9bu9iubqw5gt; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1682575959"
    }
    # 使用 session 来保持 headers 的顺序不会改变
    session.headers.clear()
    session.headers.update(headers)
    resp = session.post(url)
    cookies = resp.cookies
    cookie = requests.utils.dict_from_cookiejar(cookies)
    print(cookie)
    return cookie


num_list = []
for page in range(1, 6):
    url = 'https://match.yuanrenxue.cn/api/match/3?page=' + str(page)
    print(url)
    cookie = get_sessionid()
    headers = {
        "Host": "match.yuanrenxue.cn",
        "Connection": "keep-alive",
        "sec-ch-ua": "\"Chromium\";v=\"112\", \"Google Chrome\";v=\"112\", \"Not:A-Brand\";v=\"99\"",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "X-Requested-With": "XMLHttpRequest",
        "sec-ch-ua-mobile": "?0",
        "User-Agent": "yuanrenxue.project",
        "sec-ch-ua-platform": "\"Windows\"",
        "Sec-Fetch-Site": "same-origin",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Dest": "empty",
        "Referer": "https://match.yuanrenxue.cn/match/3",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cookie": "Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1682492258,1682492748,1682496325; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1682496325,1682575933; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1682575951; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1682575959; sessionid={}".format(cookie['sessionid'])
    }
    session.headers.clear()
    session.headers.update(headers)
    resp = session.get(url)
    data = resp.json()
    print(data)
    for num in data['data']:
        num_list.append(num['value'])

print(num_list)

c = Counter(num_list)
print(dict(c))
c1 = sorted(c.items(), key=lambda x: x[1], reverse=True)
print(c1)

请求结果

https://match.yuanrenxue.cn/api/match/3?page=1
{'sessionid': 'nunhqjqjhq6anqpfxdbq9bu9iubqw5gt'}
{'status': '1', 'state': 'success', 'data': [{'value': 2838}, {'value': 7609}, {'value': 8717}, {'value': 6923}, {'value': 5325}, {'value': 4118}, {'value': 8884}, {'value': 8717}, {'value': 2680}, {'value': 3721}]}
https://match.yuanrenxue.cn/api/match/3?page=2
{'sessionid': 'nunhqjqjhq6anqpfxdbq9bu9iubqw5gt'}
{'status': '1', 'state': 'success', 'data': [{'value': 8490}, {'value': 3148}, {'value': 6025}, {'value': 8526}, {'value': 8529}, {'value': 6481}, {'value': 9489}, {'value': 6599}, {'value': 5500}, {'value': 8717}]}
https://match.yuanrenxue.cn/api/match/3?page=3
{'sessionid': 'nunhqjqjhq6anqpfxdbq9bu9iubqw5gt'}
{'status': '1', 'state': 'success', 'data': [{'value': 185}, {'value': 8498}, {'value': 6102}, {'value': 9222}, {'value': 8717}, {'value': 2008}, {'value': 9827}, {'value': 8717}, {'value': 8224}, {'value': 2929}]}
https://match.yuanrenxue.cn/api/match/3?page=4
{'sessionid': 'nunhqjqjhq6anqpfxdbq9bu9iubqw5gt'}
{'status': '1', 'state': 'success', 'data': [{'value': 3762}, {'value': 567}, {'value': 672}, {'value': 8717}, {'value': 9524}, {'value': 7159}, {'value': 986}, {'value': 505}, {'value': 6535}, {'value': 9491}]}
https://match.yuanrenxue.cn/api/match/3?page=5
{'sessionid': 'nunhqjqjhq6anqpfxdbq9bu9iubqw5gt'}
{'status': '1', 'state': 'success', 'data': [{'value': 3612}, {'value': 9095}, {'value': 7357}, {'value': 9307}, {'value': 5650}, {'value': 2109}, {'value': 23}, {'value': 8717}, {'value': 2110}, {'value': 2792}]}
[2838, 7609, 8717, 6923, 5325, 4118, 8884, 8717, 2680, 3721, 8490, 3148, 6025, 8526, 8529, 6481, 9489, 6599, 5500, 8717, 185, 8498, 6102, 9222, 8717, 2008, 9827, 8717, 8224, 2929, 3762, 567, 672, 8717, 9524, 7159, 986, 505, 6535, 9491, 3612, 9095, 7357, 9307, 5650, 2109, 23, 8717, 2110, 2792]
{2838: 1, 7609: 1, 8717: 7, 6923: 1, 5325: 1, 4118: 1, 8884: 1, 2680: 1, 3721: 1, 8490: 1, 3148: 1, 6025: 1, 8526: 1, 8529: 1, 6481: 1, 9489: 1, 6599: 1, 5500: 1, 185: 1, 8498: 1, 6102: 1, 9222: 1, 2008: 1, 9827: 1, 8224: 1, 2929: 1, 3762: 1, 567: 1, 672: 1, 9524: 1, 7159: 1, 986: 1, 505: 1, 6535: 1, 9491: 1, 3612: 1, 9095: 1, 7357: 1, 9307: 1, 5650: 1, 2109: 1, 23: 1, 2110: 1, 2792: 1}
[(8717, 7), (2838, 1), (7609, 1), (6923, 1), (5325, 1), (4118, 1), (8884, 1), (2680, 1), (3721, 1), (8490, 1), (3148, 1), (6025, 1), (8526, 1), (8529, 1), (6481, 1), (9489, 1), (6599, 1), (5500, 1), (185, 1), (8498, 1), (6102, 1), (9222, 1), (2008, 1), (9827, 1), (8224, 1), (2929, 1), (3762, 1), (567, 1), (672, 1), (9524, 1), (7159, 1), (986, 1), (505, 1), (6535, 1), (9491, 1), (3612, 1), (9095, 1), (7357, 1), (9307, 1), (5650, 1), (2109, 1), (23, 1), (2110, 1), (2792, 1)]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

猿人学第3题-访问逻辑 - 推心置腹分析 的相关文章

  • Psycopg / Postgres:连接随机挂出

    我正在使用 psycopg2 作为我当前正在开发的cherrypy 应用程序 并使用 cli 和 phpgadmin 来手动处理一些操作 这是Python代码 One connection per thread cherrypy threa
  • Python动态导入脚本,需要有其__name__ == "__main__"代码才能被调用

    当从另一个脚本导入 python 脚本时 我想要受经典保护的脚本代码 if name main 要运行 我怎样才能运行该代码 我想做的是从 python 脚本动态更改模块 然后导入现有脚本 该脚本应该看到所做的更改并运行其 main 像Py
  • 对 Python DataFrame 进行子集化

    我正在从 R 过渡到 Python 我刚刚开始使用 Pandas 我有一个可以很好地子集化的 R 代码 k1 lt subset data Product p id Month lt mn Year yr select c Time Pro
  • 计算温度的偏导数(温度的水平平流)

    我想知道哪种方法计算x和y方向温度的偏导数 温度的水平平流 最正确 第二个代码使用温度 纬向风和经向风的数据矩阵 提取温度 T 纬向风分量 u 和经向风分量 v 的数据 import matplotlib pyplot as plt imp
  • Python - 包和设置文件

    我有一个 python 包 需要从我的项目目录中提取设置 这是我的项目当前的结构 Project bin mypackage package files Project myproject project files start py se
  • Python 可以使用单独的媒体播放器打开 mp3 文件吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以开一个mp3Python 中的文件 可以使用Popen 我并不是要在程序中运行它 我的意思是作为媒体播放器中的一个单独窗口或其
  • Accel 无法在 gedit 3 插件中工作

    我试图为 Gedit 3 编写一个使用 GObject 自省的小插件 下面显示的代码的相关部分只是为了建立一个环境 然后我可以将函数放入按钮的回调中 但是 该按钮的加速器不起作用 这段代码有什么问题 我正在使用教程here http www
  • 肥皂服务的良好框架是什么?

    我正在寻找一个用于肥皂的好框架service 我更喜欢使用Pythonic框架 但是在查看了soaplib rpclib 太不稳定 SOAPy 不适用于2 7 和ZSI 太 令人困惑 之后 我不确定这是否可能 我对使用另一种语言感到满意 尽
  • 将列表传递给 PyCrypto 中的 AES 密钥生成器

    我尝试使用 Pycrypto 生成 AES 密钥 但收到以下错误 类型错误 列表 不支持缓冲区接口 对于以下声明 aescipher AES new mykey AES MODE ECB mykey 属于类型list并包含 18854347
  • Python变量赋值问题

    a b 0 1 while b lt 50 print b a b b a b 输出 1 2 4 8 16 32 wheras a b 0 1 while b lt 50 print b a b b a b 输出 正确的斐波那契数列 1 1
  • 在 Windows 上将 NumPy 与 BLAS 链接

    我正在尝试在 Windows 系统上安装 Theano 并且需要安装 BLAS 和 LAPACK 我的 System32 文件夹中有这些的 dll 文件 当我运行 numpy config来自 Anaconda 的 show 库的路径正确显
  • 在 Ubuntu 上使用 Python 获取显示器分辨率

    对于 Ubuntu win32api 中是否有与 GetSystemMetrics 相当的代码 我需要获取显示器的宽度和高度 以像素为单位 我可以建议一些可以使用的方法 不过我还没有使用过 xlib 版本 1 xlib Python 程序的
  • Python argparse store_true 并将可选选项存储在一个参数中[重复]

    这个问题在这里已经有答案了 我需要识别是否单独给出参数或带有可选字符串或两者都没有 parser add argument options parser parse args so prog py arg 应该存储 进入选项 arg pro
  • 将 csv 文件按多列拆分为 panda 数据框

    我有一个包含多列的 tsv 文件 有 10 多列 但对我来说重要的列是名称为 user name shift id url id 的列 我想创建一个数据框 首先根据用户名分隔整个 csv 文件 即只有具有相同用户名的行才会分组在一起 从该块
  • 为什么全新安装后会有pip和conda包?

    All Windows 10 64 位 d l Anaconda 2 5 0 与 Python3 64 位并安装 全新安装后我输入conda list 并且 在软件包中 我看到 重复像 jupyter 1 0 0 py35 1 jupyte
  • 如何将时间间隔划分为不同长度的部分?

    我有一个从 0 到t 我想把这个区间分成一个以2 25 2 25 1 5为周期的累积序列 方法如下 input start 0 stop 19 output sequence 0 2 25 4 5 6 8 25 10 5 12 14 25
  • 在 Django/python 中,如何将内存缓存设置为无限时间?

    cache set key value 9999999 但这并不是无限的时间 def get memcache timeout self timeout Memcached deals with long gt 30 days timeou
  • Python 类方法的示例用例是什么?

    我读了Python 中的类方法有什么用 https stackoverflow com questions 38238 what are class methods in python for但那篇文章中的例子很复杂 我正在寻找 Pytho
  • 如何从python导入路径中删除当前目录

    我想使用 Mercurial 存储库hg本身 也就是说 我克隆了 Mercurialhttps www mercurial scm org repo hg https www mercurial scm org repo hg并想运行一些h
  • Pandas 替换特定列上的值

    我知道这两个类似的问题 熊猫替换值 https stackoverflow com questions 27117773 pandas replace values Pandas 替换数据框中的列值 https stackoverflow

随机推荐

  • 前后端获取当前日期

    js直接获取当天时间 标准格式年月日 时分秒 往后推迟时间 则添加 1小时 60 60 1000 new Date new Date 8 3600 1000 toJSON substr 0 19 replace T 后端获取 new Sim
  • git cherry-pick 解决开发分支选错问题

    应用场景 正常开发流程 创建分支并checkout转换为开发分支进行开发 但我在master开发后commit之后意识到了这个问题 重新git pull后并checkout新分支发现代码改动遗失 因为git pull 会把当前分支覆盖 在请
  • Network 【HDU - 3078】【LCA+暴力查询】

    题目链接 你要是真暴力这道题还是要T的 但是 做了剪枝就会过了 我们知道对于LCA每个节点有它自己的深度 在这里 我就将每个节点的深度数组当作了每个节点道最初根节点的距离了 然后 就是剪枝操作饿了 判断是否是可行解的时候用的是dis x d
  • 最新最全的angular4.x、anuglar2、anuglar8入门实战视频教程

    angular4 x视频教程强势来袭 忙碌的工作 不停的充电 好久没遇到这么实用的教程了 跟同行分享一下 写篇文章 放松放松 有好的技术资源的也希望大家多分享 我会关注学习的 angular4 x angular5 x angular8 x
  • 洛谷 P1876 开灯

    题目链接 https www luogu com cn problem P1876 include
  • 图像分析技术大比拼:图像分类、图像识别、目标检测的优缺点分析与算法比较

    计算机视觉是人工智能领域的一个重要分支 它旨在构建能够理解和处理图像 视频等视觉信息的计算机系统 在计算机视觉领域中 图像分类 图像识别和目标检测是三个重要的任务 一 图像分类 图像分类是计算机视觉领域最基础的任务之一 它的目的是将一张图像
  • Linux--高级IO

    高级IO 1 五种IO模型 阻塞IO 在内核将数据准备好之前 系统调用会一直等待 所有的套接字 默认都是阻塞方式 阻塞IO是最常见的IO模型 非阻塞IO 如果内核还未将数据准备好 系统调用仍然会直接返回 并且返回EWOULDBLOCK错误码
  • PyCharm创建virtualenv方法

    Python的版本众多 在加上适用不同版本的Python Package 这导致在同时进行几个项目时 对库的依赖存在很大的问题 这个时候就牵涉到对Python以及依赖库的版本管理 方便进行开发 virtualenv就是用来解决这个问题的 下
  • Kafka 验证部署(单机版)kafka-producer-perf-test.sh 吞吐量测试工具的基本使用

    1 测试topic创建与删除 1 创建一个测试topic 名为test topic 创建3个分区 每个分区分配1个副本 因为是单机kafka 如果是集群的话可以分配多个副本 如果分配的副本数大于broker的数量时 会报错 bin kafk
  • 华为内部面试题库---(14)

    1 关于虚拟地址空间的说法错误的是 A 进程地址空间是用多少分配多少 4G仅仅是最大限额 B 进程的地址空间并不一定对应实际的物理页 C 不同进程的不同虚拟地址可以映射到相同的物理页 D 不同进程的相同虚拟地址不能映射到相同的物理页 解答
  • KNN回归-预测二手车

    KNN是一个典型的分类模型 就时预测类别 例如苹果 香蕉等 预测的结果是 训练集上已经包含的类别 并不会预测出新的类别 二手车价格预测是预测车的价格 是数值 理应按照回归算法来算 怎么用knn来实现回归问题呢 找到最近的K样本之后 我们直接
  • Android - 常见内存泄露问题盘点

    1 内存泄漏的本质 内存泄漏的本质就是对象引用未释放 当对象被创建时 如果没有被正确释放 那么这些对象就会一直占用内存 直到应用程序退出 例如 当一个Activity被销毁时 如果它还持有其他对象的引用 那么这些对象就无法被垃圾回收器回收
  • 层层深入高效地拿下商户收获刷脸红利

    无现金时代已陪伴我们许久 扫码支付给消费者带去诸多便利 正当人们刚刚养成扫码支付消费习惯的时候 刷脸支付这种新的支付方式又来了 两年后 我们或将迎来 无手机 支付时代 刷脸支付将使得消费者拥有更加流畅的支付体验 对商户来说 收款也变得更加高
  • python模块matplotlib.pyplot用法_python – 虽然使用pyplot.show(),但如何使用matplotlib保持图形大小不变?...

    看看下面的python示例 import matplotlib as mpl import matplotlib pyplot as plt mpl rcParams figure figsize 8 27 11 69 fig plt fi
  • Python 数据分析与数据可视化(三)列表、元组、字典、集合与字符串

    文章目录 3 列表 元组 字典 集合与字符串 3 1 列表与列表推导式 3 1 1 创建列表 下标访问 3 1 1 1 简介 3 1 1 2 创建列表 3 1 1 3 使用下标访问列表中的元素 3 1 2 列表常用方法 3 1 2 1 ap
  • 输入身份证号判断性别并求年龄

    include
  • 如何二次封装一个el-table组件并二次复用

    注 示例使用的是vue3和element 进行二次封装的 首先我们来看效果图 总共可以分为以下几个模块 表格数据操作按钮区域 表格信息提示区域 表格主体内容展示区域 表格分页区域 表单搜索没有封装在这里是为了降低代码的耦合性 有兴趣的可以查
  • c# dataGridView 数据合并单元格

    原文地址http sigechuizi cn article 133
  • unity登录界面和场景异步加载多种方式

    文字加载场景切换 挂到摄象机上 拖入文本 此文本用于显示加载文本的位置 实际显示内容位文中文本 正在加载中时显示 夏目正在努力加载哦 加载完成后显示 ok using UnityEngine using System Collections
  • 猿人学第3题-访问逻辑 - 推心置腹分析

    3 访问逻辑 推心置腹分析 1 请求页面并进行抓包 https match yuanrenxue cn match 3 2 对抓包进行分析 判断发现每次数据请求前先请求 https match yuanrenxue cn jssm 分析参数