猿人学第三题 罗生门

思路

使用开发者工具进行抓包,验证数据请求的方式是什么,这里推荐大家使用浏览器自带的工具。

我们发现每次的翻页请求都会有一个jssm请求,这里我们先记录一下这个情况,现在观察一下cookie是否有变化。

 

 

这个实际上没有发生变化。参数也没有加密,所以直接调试一下源码,这边由于是ajax所以直接xhr分析一下。

 提取这个request中的代吗看一下

window.url='/api/match/3';
request = function() {
    var list = {
        "page": window.page,
    };
    $.ajax({
        url: window.url,
        dataType: "json",
        async: false,
        data: list,
        type: "GET",
        beforeSend: function(request) {
            (function() {
                var httpRequest = new XMLHttpRequest();
                var url = '/jssm';
                httpRequest.open('POST', url, false);
                httpRequest.send()
            }
            )()
        },
        success: function(data) {
            let name = ['梦琪', '忆柳', '之桃', 'bai慕青', '问兰', 'du尔岚', '元香', '初夏', '沛菡', '傲珊zhi', '曼文', '乐菱', 'dao痴珊', '恨玉', '惜文', '香寒', '新柔', '语蓉', '海安', '夜蓉', '涵柏', '水桃', '醉蓝', '春儿', '语琴', '从彤', '傲晴', '语兰', '又菱', '碧彤', '元霜', '怜梦', '紫寒', '妙彤', '曼易', '南莲', '紫翠', '雨寒', '易烟', '如萱', '若南', '寻真', '晓亦', '向珊', '慕灵', '以蕊', '寻雁', '映易', '雪柳', '孤岚', '笑霜', '海云', '凝天', '沛珊', '寒云', '冰旋', '宛儿', '绿真', '盼儿', '晓霜', '碧凡', '夏菡', '曼香', '若烟', '半梦', '雅绿', '冰蓝', '灵槐', '平安', '书翠', '翠风', '香巧', '代云', '梦曼', '幼翠', '友巧', '听寒', '梦柏', '醉易', '访旋', '亦玉', '凌萱', '访卉', '怀亦', '笑蓝', '春翠', '靖柏', '夜蕾', '冰夏', '梦松', '书雪', '乐枫', '念薇', '靖雁', '寻春', '恨山', '从寒', '忆香', '觅波', '静曼', '凡旋', '以亦', '念露', '芷蕾', '千兰', '新波', '代真', '新蕾', '雁玉', '冷卉', '紫山', '千琴', '恨天', '傲芙', '盼山', '怀蝶', '冰兰', '山柏', '翠萱', '恨松', '问旋', '从南', '白易', '问筠', '如霜', '半芹', '丹珍', '冰彤', '亦寒', '寒雁', '怜云', '寻文', '乐丹', '翠柔', '谷山', '之瑶', '冰露', '尔珍', '谷雪', '乐萱', '涵菡', '海莲', '傲蕾', '青槐', '冬儿', '易梦', '惜雪', '宛海', '之柔', '夏青', '亦瑶', '妙菡', '春竹', '痴梦', '紫蓝', '晓巧', '幻柏', '元风', '冰枫', '访蕊', '南春', '芷蕊', '凡蕾', '凡柔', '安蕾', '天荷', '含玉', '书兰', '雅琴', '书瑶', '春雁', '从安', '夏槐', '念芹', '怀萍代曼', '幻珊', '谷丝', '秋翠', '白晴', '海露', '代荷', '含玉', '书蕾', '听白', '访琴', '灵雁', '秋春', '雪青', '乐瑶', '含烟', '涵双', '平蝶', '雅蕊', '傲之', '灵薇', '绿春', '含蕾', '从梦', '从蓉', '初丹。听兰', '听蓉', '语芙', '夏彤', '凌瑶', '忆翠', '幻灵', '怜菡', '紫南', '依珊', '妙竹', '访烟', '怜蕾', '映寒', '友绿', '冰萍', '惜霜', '凌香', '芷蕾', '雁卉', '迎梦', '元柏', '代萱', '紫真', '千青', '凌寒', '紫安', '寒安', '怀蕊', '秋荷', '涵雁', '以山', '凡梅', '盼曼', '翠彤', '谷冬', '新巧', '冷安', '千萍', '冰烟', '雅阳', '友绿', '南松', '诗云', '飞风', '寄灵', '书芹', '幼蓉', '以蓝', '笑寒', '忆寒', '秋烟', '芷巧', '水香', '映之', '醉波', '幻莲', '夜山', '芷卉', '向彤', '小玉', '幼南', '凡梦', '尔曼', '念波', '迎松', '青寒', '笑天', '涵蕾', '碧菡', '映秋', '盼烟', '忆山', '以寒', '寒香', '小凡', '代亦', '梦露', '映波', '友蕊', '寄凡', '怜蕾', '雁枫', '水绿', '曼荷', '笑珊', '寒珊', '谷南', '慕儿', '夏岚', '友儿', '小萱', '紫青', '妙菱', '冬寒', '曼柔', '语蝶', '青筠', '夜安', '觅海', '问安', '晓槐', '雅山', '访云', '翠容', '寒凡', '晓绿', '以菱', '冬云', '含玉', '访枫'];
            let com_name = ['元优', '多乾', '巨久', '德祥', '洪仁', '乾富', '隆安', '鑫德', '乾广', '伟复', '耀顺', '同福', '东昌', '洪亚', '盛欣', '元优', '耀佳', '昌益', '欣丰', '乾美', '春信', '贵丰', '东弘', '同富', '飞庆', '万鼎', '隆高', '久协', '德高', '正禄', '如福', '圣耀', '洪昇', '合寿', '宏禄', '如通', '公盈', '春谦', '皇贵', '伟荣', '猿人学', '破釜成', '寒冰射手', '冰冰凉', '凉冰冰', '元优', '多乾', '巨久', '德祥', '洪仁', '乾富', '隆安', '鑫德', '乾广', '伟复', '耀顺', '同福', '东昌', '洪亚', '盛欣', '元优', '耀佳', '昌益', '欣丰', '乾美', '春信', '贵丰', '东弘', '同富', '飞庆', '万鼎', '隆高', '久协', '德高', '正禄', '如福', '圣耀', '洪昇', '合寿', '宏禄', '如通', '公盈', '春谦', '皇贵', '伟荣', '猿人学', '破釜成', '寒冰射手', '冰冰凉', '凉冰冰'];
            data = data.data;
            let html = `<table class="table"><tr><th>申请/注册号</th><th>申请日期</th><th>商标申请人</th><th>申请公司名</th></tr>`;
            let a = `<tr><td class="lwtd0">3472509</td><td class="lwtd0">~申请~</td><td class="lwtd0">马梦启</td><td class="lwtd0">东莞市协和粘胶有限公司</td></tr>`;
            if (window.page) {} else {
                window.page = 1
            }
            let op = 1;
            $.each(data, function(index, val) {
                let dat_year = 2000 + window.page;
                let dat_mou = window.page * 2;
                let dat_day = window.page * 5 + op;
                let dat_result = dat_year + '年' + dat_mou + '月' + dat_day + '日';
                let b = a.replace('3472509', val.value).replace('~申请~', dat_result).replace('马梦启', name[op * window.page]).replace('东莞市协和粘胶有限公司', com_name[op * window.page] + '科技发展公司');
                html += b;
                op += 1
            });
            $('.buwyqrs').text('').append(html + '</table>')
        },
        complete: function() {},
        error: function() {
            alert('数据加载失败,您的网络环境可能不太支持这道题目。请您关闭所有抓包工具后重试。如果还不行请加群反馈问题。您可以在此期间可进行其他题目的尝试');
            alert('您可以扫描二维码加入交流群反馈问题。相遇只为更好~,期待与您的见面');
            $('.page-message').eq(0).addClass('active');
            $('.page-message').removeClass('active');
            window.location.href = "http://match.yuanrenxue.com/list";
        }
    })
}
;
request()

 我们发现,这段代码中httpRequest.send()之前会先请求一次/jssm,这就是为什么我们每次翻页会出现一个jssm。那么,我们试一下不请求jssm的时候会返回什么?

返回的是这段js代码,我们直接复制在控制台打开看一下这个是什么

 

当你多试几次,或者直接子在eval中输出一下返回值你会发现这是一个无限debugger的过程,并且这段信息对我们这个问题是没有帮助的,所以这里我们可以知道,这是我们请求参数出现问题导致的结果。我们对比一下

import requests


url = "https://match.yuanrenxue.cn/api/match/3?page=2"

# 直接请求看一下返回的表头

print(requests.get(url).headers)

我们发现返回的表头是这个和上面请求成功的表头对比,少了session-id

 

那么问题这个表头的添加过程应该是请求jssm的过程中加入的。所以请求jssm观察返回

 没有返回session-id,这里我们试着加一些cookie

这边有一个细节问题,使用request的时候并不能成功获取道请求,使用session的话确实可以的,原因就是request中会自己进行排序请求头,打乱了原先的。

import requests

session = requests.session()

session.headers = {
    'Host': 'match.yuanrenxue.cn',
    'Connection': 'keep-alive',
    'Content-Length': '0',
    'sec-ch-ua': '"Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"',
    'sec-ch-ua-mobile': '?0',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.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_9bcbda9cbf86757998a2339a0437208e=1680872730; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1680872730; tk=-5150129943585824243; sessionid=oq9hvhsahjlotanjvu9mxha0fakbierb; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1680873632; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1680874330',
}
print(session.post('https://match.yuanrenxue.cn/jssm').headers)

 

出现这个之后我们在进行请求数据,发现是可以成功的,所以直接循环即可,只要每次请求翻页的时候先请求依次jssm就行

import requests
session = requests.session()
session.headers = {
    'Content-Length': '0',
    'Accept': '*/*',
    'Referer': 'https://match.yuanrenxue.cn/match/3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cookie': 'sessionid=oq9hvhsahjlotanjvu9mxha0fakbierb',
}

for i in range(1, 6):
    url = f"https://match.yuanrenxue.com/api/match/3?page={i}"
    session.post('https://match.yuanrenxue.cn/jssm')
    print(session.get(url).text)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值