0%

入门级cookie-猿人学第13题

入门级cookie-猿人学第13题

这题考验的是动态cookie的基础知识。我们通过burp抓包可以发现获取数据有两个关键参数page与yuanrenxue_cookie。

基础知识

Cookie可以具有两种类型:会话 Cookie(Session Cookie)和持久 Cookie(Persistent Cookie),它们之间有以下区别:


Session Cookie Session Cookie 是临时存储在客户端(浏览器)中的 Cookie,其生命周期限定在用户会话期间。它通常在用户关闭浏览器时被删除,或者在一定时间内没有活动时被浏览器自动删除。Session Cookie 不设置过期时间,而是存储在浏览器的内存中,与用户的会话相关联。
持久 Cookie 持久 Cookie 有一个特定的过期时间,在过期时间之前会一直存在于客户端的 Cookie 存储中。持久 Cookie 存储在客户端的硬盘上,即使用户关闭浏览器,它们仍然会保留,直到达到设置的过期时间。

解题js代码

这题考察两个步骤第一步登录获取sessionid,之后再获取yuanrenxue_cookie,然后请求就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import json
import re

import requests
import execjs

url="https://match.yuanrenxue.cn/match/13"
headers = {"user-agent": "yuanrenxue.project"}
s=requests.session()
s.headers.update(headers)
proxy={'https':'http://127.0.0.1:8080'}
login="https://match.yuanrenxue.cn/api/login"
data = {
'username': 'xxxxx',
'password': 'xxxxx'
}
#登录获取sessionid
s.post(login,data=data,proxies=proxy,verify=False)

#获取yuanrenxue_cookie
req=s.get(url,proxies=proxy,verify=False)
pattern = r"=(.*?);"
match = re.search(pattern, req.text)
jscode= match.group(1)+'\''

ctx = execjs.compile('function exec_js() { return ' + jscode + '; }')
result = ctx.call('exec_js')
print(result)
cookies = {}
key, value = result.strip().split('=', 1)
cookies[key] = value
s.cookies.update(cookies)

num=[]

getdaturl="https://match.yuanrenxue.cn/api/match/13?page={}"
for i in range (1,6):
# print(s.get(getdaturl.format(i),proxies=proxy,verify=False).text)
data = json.loads(s.get(getdaturl.format(i),proxies=proxy,verify=False).text)
values = [item['value'] for item in data['data']]
num=num+values

addall=sum(num)
print(addall)