猿人学web端爬虫攻防大赛赛题第13题——入门级cookie

题目网址:https://match.yuanrenxue.cn/match/13

解题步骤

  1. 题目要求如下。
    image
  2. 看下触发的流量包中哪个响应内容中有这些数字。
    image
  3. 找到对应的请求地址了,尝试去访问一下,得到却不是我们想要的结果。
    image
  4. 再看下原始流量包,包含一个cookie,加上它再去访问。
    image
    image
  5. 还是访问不到。再看cookie中有个特殊的字段yuanrenxue_cookie,它的值有些奇怪,追踪一下它的生成过程。各种搜url关键字、拦截器和yuanrenxue_cookie关键字就是找不到。
    image
    image
    image
  6. 有点奇怪了,我们通过fiddler工具看下触发的所有流量包吧。
    image
    注意图中框起来的数据包,它的响应内容竟然是yuanrenxue_cookie的生成代码。
  7. 访问一下,果然得到了yuanrenxue_cookie的值。
    image
  8. 接下来只要对得到的内容进行处理,带上这个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)
    
    运行结果如下。
    image
  9. 提交答案,成功通过。
    image
posted @ 2024-10-28 18:45  死不悔改奇男子  阅读(45)  评论(0编辑  收藏  举报