猿人学web端爬虫攻防大赛赛题第13题——入门级cookie
题目网址:https://match.yuanrenxue.cn/match/13
解题步骤
- 题目要求如下。
- 看下触发的流量包中哪个响应内容中有这些数字。
- 找到对应的请求地址了,尝试去访问一下,得到却不是我们想要的结果。
- 再看下原始流量包,包含一个cookie,加上它再去访问。
- 还是访问不到。再看cookie中有个特殊的字段
yuanrenxue_cookie
,它的值有些奇怪,追踪一下它的生成过程。各种搜url关键字、拦截器和yuanrenxue_cookie
关键字就是找不到。
- 有点奇怪了,我们通过fiddler工具看下触发的所有流量包吧。
注意图中框起来的数据包,它的响应内容竟然是yuanrenxue_cookie
的生成代码。 - 访问一下,果然得到了
yuanrenxue_cookie
的值。
- 接下来只要对得到的内容进行处理,带上这个cookie,然后再去访问
https://match.yuanrenxue.cn/api/match/13
就能获取到数字了。
运行结果如下。import requests import re login_url = "https://match.yuanrenxue.cn/match/13" headers = { "cookie": "sessionid=1zl8qqmuijewpn1pxji9epmjvoaz5ipi; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1729915594,1729937930,1729945496,1730034166; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1730034183", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 " "Safari/537.36"} resp1 = requests.get(login_url, headers=headers) yuanrenxue_cookie_resp = resp1.text # 得到记载yuanrenxue_cookie的JavaScript代码 # print(yuanrenxue_cookie) """ <script>document.cookie=('y')+('u')+('a')+('n')+('r')+('e')+('n')+('x')+('u')+('e')+('_')+('c')+('o')+('o')+('k')+('i')+('e')+('=')+('1')+('7')+('3')+('0')+('0')+('7')+('5')+('6')+('5')+('5')+('|')+('2')+('M')+('l')+('D')+('a')+('v')+('z')+('j')+('W')+('C')+('K')+('S')+('S')+('o')+('C')+('z')+('6')+('L')+('5')+('m')+('Q')+('f')+('V')+('6')+('B')+('Z')+('t')+('n')+('T')+('w')+('x')+('b')+('W')+('2')+('U')+('O')+('C')+('Q')+('1')+('d')+('O')+('v')+('h')+('Z')+('J')+('N')+('6')+('o')+('4')+('5')+('y')+('s')+('5')+('N')+('e')+('M')+('O')+('F')+('J')+('8')+('n')+('b')+('4')+('1')+('N')+('K')+('M')+('e')+('C')+('e')+('u')+('h')+('h')+('t')+('Y')+('g')+('F')+('j')+('L')+('D')+('h')+('L')+('6')+('j')+('A')+('I')+('w')+('v')+('3')+('l')+('t')+('3')+('a')+('B')+('T')+('A')+('b')+('u')+('W')+('i')+('F')+('9')+('u')+('Z')+('m')+('c')+('I')+('S')+('i')+('w')+('3')+('3')+('d')+('g')+('8')+('p')+('C')+('o')+('G')+('n')+('O')+('V')+('F')+('D')+('4')+('T')+('0')+('u')+('Z')+('t')+('z')+('I')+('V')+('X')+('T')+('v')+('J')+('o')+('e')+('H')+('K')+('u')+('s')+('S')+('L')+('o')+('N')+('j')+('M')+('1')+('D')+('H')+';path=/';location.href=location.pathname+location.search</script> """ # 利用正则表达式将得到的yuanrenxue_cookie拼接起来 pattern = "\(\'(?P<need>.*?)\'\)" findall = re.findall(pattern, yuanrenxue_cookie_resp) yuanrenxue_cookie = "" # 拼接得到的yuanrenxue_cookie for item in findall: yuanrenxue_cookie += item # print(yuanrenxue_cookie) yuanrenxue_cookie = "; " + yuanrenxue_cookie headers["cookie"] = headers["cookie"] + yuanrenxue_cookie # print(headers) sum_num = 0 for i in range(1, 6): url = "https://match.yuanrenxue.cn/api/match/13?page={}".format(i) resp = requests.get(url, headers=headers) value_all = resp.text # 利用正则匹配value pattern_num = r'{"value": (?P<num>.*?)}' re_findall = re.findall(pattern_num, value_all) for item in re_findall: sum_num += int(item) print(sum_num)
- 提交答案,成功通过。