猿人学-第三题-逆向分析

目标:抓取下列5页商标的数据,并将出现频率最高的申请号填入答案中

翻页分析:翻页后,就只有jssm和page两个。这里我们可以联想一下看看jssm和page之间是不是有联系。

打开jssm,我们发现没有请求参数、请求头也没有加密。但、其响应标头有返回一个cookies的sessionid。这里我们多留一下这个sessionid,看看后面是不是对请求page起作用。

再打开page=2,我们也没有发现可以的加密参数和加密请求头。但是翻开cookies时,我们发现其有带sessionid这个由jssm的响应标头返回的cookies。

通过分析,我们大致可以得出一个思路:首先要请求jssm,取出jssm返回的sessionid。然后再请求page=2,page=2要带上上面取出的sessionid。再进行请求,然后直接得出结果。

但是这个问题真的有如此简单吗?直接上代码验证。

这里我们发现,其相应标头并没有返回cookies的sessionid。这是因为,该题的点在校验请求头的顺序。

重新构建请求头。

请求,可以得出结果。

那为什么请求头的顺序不对呢?

这是因为浏览器会对请求头排序,我们在浏览器看到的请求头都是经过排序的,而不是服务器原始顺序的请求头。解决这个问题,只需要使用抓包软件就可以解决。比如charles、findder等抓包软件。

下面page=2也是同样的方法。

源码如下:

import requests
from collections import Counter

class firstHeaders:
    def items(self):
        headers = {
            "Content-Length": "0",
            "Sec-Ch-Ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
            "Sec-Ch-Ua-Mobile": "?0",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.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, zstd",
            "Accept-Language": "zh-CN,zh;q=0.9",
            "Cookie": "Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1716902967; no-alert3=true; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1717295263,1717314335; tk=-8838488315772654498; sessionid=t2ivk05m79d9oxqxutbcynikyeb93u88; m=7d8915425233260fbbc811c253bdc577|1717314348000; Hm_lvt_434c501fe98c1a8ec74b813751d4e3e3=1717311666,1717314893; Hm_lpvt_434c501fe98c1a8ec74b813751d4e3e3=1717314893; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1717314899; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1717334940"

        }
        return ((k,v) for k,v in headers.items())

def firstRequests():
    """获取:JSSM的sessionid"""
    url = "https://match.yuanrenxue.cn/jssm"
    response = requests.post(url, headers=firstHeaders(), verify=False)
    cookies = {
        "sessionid": response.cookies.get("sessionid")
    }
    return cookies

class secondHeaders:
    def items(self):
        headers = {
            "sec-ch-ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
            "Accept": "application/json, text/javascript, */*; q=0.01",
            "X-Requested-With": "XMLHttpRequest",
            "sec-ch-ua-mobile": "?0",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
            "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, zstd",
            "Accept-Language": "zh-CN,zh;q=0.9",
        }
        return ((k,v) for k,v in headers.items())

def secondRequests(cookies, page):
    url = "https://match.yuanrenxue.cn/api/match/3?page={}".format(page)
    response = requests.get(url, headers=secondHeaders(), cookies=cookies)
    return response.json()['data']


if __name__ == '__main__':
    calculate_num = []
    for page in range(1, 6):
        cookies = firstRequests()
        data_row = secondRequests(cookies, page)
        print(data_row)
        for row in data_row:
            val = row['value']
            calculate_num.append(val)
    top = Counter(calculate_num).most_common(1)[0]
    print(top)

相关推荐

  1. leetcode

    2024-06-06 01:20:02       12 阅读

最近更新

  1. uniapp 防止重复提交数据

    2024-06-06 01:20:02       0 阅读
  2. 通过实例说明.NET Autofac依赖注入的多种方式

    2024-06-06 01:20:02       0 阅读
  3. .NET 9 预览版 5 发布

    2024-06-06 01:20:02       0 阅读
  4. 【Android12】第三方APP开机自启

    2024-06-06 01:20:02       0 阅读
  5. 深入理解CSS中的透明效果实现

    2024-06-06 01:20:02       1 阅读
  6. mac查看31295端口被占

    2024-06-06 01:20:02       1 阅读
  7. 简述框架和函数库的区别

    2024-06-06 01:20:02       1 阅读
  8. WPF自定义模板--ToggleButton

    2024-06-06 01:20:02       1 阅读
  9. pc安装python opencv

    2024-06-06 01:20:02       1 阅读

热门阅读

  1. MyBatisPlus实现多表查询

    2024-06-06 01:20:02       9 阅读
  2. PostgreSQL LATERAL 的工作原理

    2024-06-06 01:20:02       13 阅读
  3. 【数据库系统概论】触发器

    2024-06-06 01:20:02       13 阅读
  4. 【机器学习】分值融合方法

    2024-06-06 01:20:02       10 阅读
  5. golang普通函数与闭包函数使用示例

    2024-06-06 01:20:02       12 阅读
  6. 【程序填空题】矩阵(运算符重载)

    2024-06-06 01:20:02       11 阅读
  7. Vue前端如何配合SpringBoot后端实现文件下载

    2024-06-06 01:20:02       10 阅读