猿人学第十三题入门级cookie


入门级js

这道题还是比较简单的,是考察动态cookie 变化的

思路

观察请求

我们观察到请求里面yuanrenxue_cookie会有变化

image-20210818171011940

image-20210818171040089

我们发现先请求13这个接口获取一段js脚本。然后再请求api/match/13这个接口获取数据

再查看获取数据接口的请求头,发现cookie有个字段yuanrenxue_cookie非常重要。

那么我们推断先请求脚本给cookie赋值。再添加到请求接口

得出结论

发现js脚本果然是对cookie赋值,而且对比请求头里面的值发现其实就是将字母拼接

<script>document.cookie=('y')+('u')+('a')+('n')+('r')+('e')+('n')+('x')+('u')+('e')+('_')+('c')+('o')+('o')+('k')+('i')+('e')+('=')+('1')+('6')+('2')+('9')+('2')+('7')+('7')+('2')+('3')+('2')+('|')+('c')+('F')+('j')+('T')+('g')+('g')+('D')+('Y')+('q')+('r')+('f')+('u')+('G')+('x')+('Q')+('t')+('n')+('o')+('O')+('K')+('5')+('p')+('w')+('d')+('H')+('J')+('z')+('g')+('E')+('h')+('b')+('P')+('r')+('J')+('k')+('X')+('W')+('S')+('6')+('1')+('y')+('7')+('Z')+('q')+('D')+('e')+('E')+('2')+('o')+('M')+('L')+('w')+('r')+('P')+('i')+('L')+('B')+('f')+('z')+('E')+('i')+('Y')+('z')+('z')+('P')+('4')+('A')+('p')+('9')+('J')+('k')+('z')+('G')+('a')+('I')+('d')+('j')+('D')+('P')+('f')+('u')+('b')+('D')+('H')+('4')+('p')+('t')+('Y')+('4')+('O')+('9')+('Q')+('b')+('4')+('j')+('m')+('y')+('F')+('z')+('7')+('S')+('C')+('k')+('h')+('3')+('i')+('8')+('k')+('E')+('y')+('C')+('m')+('i')+('F')+('F')+('4')+('O')+('a')+('w')+('m')+('G')+('n')+('C')+('f')+('S')+('u')+('S')+('b')+('2')+('v')+('n')+('J')+('a')+('c')+('w')+('t')+('c')+('g')+('H')+('k')+('H')+('S')+('m')+('q')+('j')+('M')+('v')+('l')+('h')+('B')+('O')+('V')+('3')+('c')+('l')+('m')+('f')+('3')+('n')+('N')+('c')+('A')+('i')+('Y')+('u')+('a')+('H')+('t')+('6')+('c')+('I')+('t')+('2')+('M')+('U')+('V')+('r')+('R')+('P')+('x')+('D')+('0')+('T')+('8')+('A')+('K')+('d')+('2')+('w')+('C')+('e')+('Q')+('d')+('C')+('3')+('J')+('k')+('D')+('b')+';path=/';location.href=location.pathname+location.search</script>

那么问题就解决了

最后解题

python 代码

import requests
import time
import execjs
import re

session = requests.Session()



# headers = {
#     'authority': 'match.yuanrenxue.com',
#     'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
#     'accept': 'application/json, text/javascript, */*; q=0.01',
#     'dnt': '1',
#     'x-requested-with': 'XMLHttpRequest',
#     'sec-ch-ua-mobile': '?0',
#     "User-Agent": "yuanrenxue.project",
#     'sec-fetch-site': 'same-origin',
#     'sec-fetch-mode': 'cors',
#     'sec-fetch-dest': 'empty',
#     'referer': 'https://match.yuanrenxue.com/match/13',
#     'accept-language': 'zh-CN,zh;q=0.9',
# }

headers = {"User-Agent": "yuanrenxue.project", }


def get_result():
    url = "http://match.yuanrenxue.com/match/13"

    r = session.get(url)

    print(r.text)

    # 每次都是一个全新的js 所以每次得重新请求得到,下面那个固定了。没用,时间戳会变

    # sum = 0
    # ctx = execjs.compile(open(file).read())
    # res = ctx.call('get_cookie')
    #
    # cookie = res.replace(';path=/','')


    # print(cookie)

    reg = re.compile("'([a-zA-Z0-9=|_])'")

    results = reg.findall(r.text)

    cookie = ''.join(results)

    print(cookie)

    key, value = cookie.split('=')

    session.cookies.set(key, value)

    sum = 0

    for i in range(1, 6):
        response = session.get(f'https://match.yuanrenxue.com/api/match/13?page={i}',headers=headers)

        print(response.text)

        for j in response.json().get('data'):
            sum += j["value"]

        time.sleep(1)
    return sum


res = get_result()
print("结果为: "+str(res))
# 结果为: 213133

文章作者: jusk9527
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 jusk9527 !
  目录