猿人学-第三题

1.1 目标网站

https://match.yuanrenxue.com/match/3

1.2 查看请求和访问逻辑

1.2.1 打开fiddle进行抓包,可以看到两个请求在这里插入图片描述

可以看到会请求两个请求, 第一个请求返回Set-Cookie,第二个请求带上就可以访问。

请添加图片描述
对生成数据的接口进行重放, 发现不能够正常返回数据, 对两个请求同时进行重放, 发现数据返回正常

1.2.2 Python模拟请求

在这里插入图片描述
发现访问并没有返回到cookie, 对网页端和python模拟进行对比发现Python模拟请求头顺序不对

在这里插入图片描述
在这里插入图片描述
这里发现请求头不是按照顺序来的, 其中:

你向 headers 关键字参数传入一个 OrderedDict,就可以向提供一个带排序的 header。
然而,Requests 使用的默认 header 的次序会被优先选择。
这意味着如果你在 headers 关键字参数中覆盖了默认 header和关键字参数中别的 header 相比,它们也许看上去会是次序错误的。

requests 库 的header排序是会被优先选择的,而 Session对象中不会。
那么用户应该考虑在 Session 对象上面设置默认 header,只要将 Session 设为一个定制的 OrderedDict 即可。这样就会让它成为优选的次序。

在这里插入图片描述

2.1 代码

from collections import Counter

import requests
import urllib3

urllib3.disable_warnings()

headers = {
    "Host": "match.yuanrenxue.com",
    "Connection": "keep-alive",
    "Content-Length": "0",
    "sec-ch-ua": '".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"',
    "sec-ch-ua-mobile": "?0",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
    "sec-ch-ua-platform": "Windows",
    "Accept": "*/*",
    "Origin": "https://match.yuanrenxue.com",
    "Sec-Fetch-Site": "same-origin",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Dest": "empty",
    "Referer": "https://match.yuanrenxue.com/match/3",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Cookie": "m=e6370aff58adacf77e6ddbbe8b365047|1659771468000; Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1659761954,1659767697,1659767716,1659771472; qpfccr=true; no-alert3=true; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1659443435,1659452878,1659761832,1659771825; tk=-3495643738000386252; sessionid=wob9s7wdgrmmsnb7o8cl3a0ycqhmi9lf; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1659771870; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1659771870",
}

proxies = {
    "http": "http://localhost:8000",
    "https": "http://localhost:8000",
}

session = requests.session()
data_list = []
for page in range(1, 6):
    if page == 4 or page == 5:
        headers['user-agent'] = 'yuanrenxue.project'
    session.headers = headers
    res = session.post("https://match.yuanrenxue.com/jssm", verify=False)
    # cookie_index = {"sessionid": res.cookies.get("sessionid")}
    url_api = 'http://match.yuanrenxue.com/api/match/3?page={page}'.format(page=page)
    res_dic = session.get(url=url_api).json()
    for i in res_dic['data']:
        data = i['value']
        # print(data)
        data_list.append(data)


print(max(data_list, key=data_list.count))

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值