猿人学第三题-访问逻辑 - 推心置腹(第一届)

# 最近刚开始学习js逆向,猿人学这个平台上的题目难度有层次,对新手比较友好,下面是第三题的解题代码:

import requests
'''题目设计思路:首先,客户端服务器发送第一个请求,这个请求会返回一个Set-Cookie。
                其次,客户端带上这个Set-Cookie中的sessionid值再向服务器发送第二个请求,返回正确的数据包。
   难点:  1.服务器会验证第一个请求headers的顺序,若顺序错误,不返回Set-Cookie。
   干扰项:1.不带Set-Cookie直接向服务器发送请求,返回一段混淆的js代码,实际上这段js代码没什么用。
'''

url = "https://match.yuanrenxue.cn/jssm"  # 第一个请求地址
headers = {                               # 设置第一个请求的headers
    'Content-Length': '0',
    'Accept': '*/*',
    'Referer': 'https://match.yuanrenxue.cn/match/3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cookie': 'sessionid=3yrryb4zmr5s6tap0cvvh26mzphptrqz',
}
# 先session
session=requests.Session()               # 实例化一个session,用于固定headers的发送顺序
# 后session clear,clear这个是比较关键的写法。
session.headers.clear()                  # 先清空默认的headers
session.headers.update(headers)          # 写入自己的headers
resp=session.post(url)                   # 发送第一个请求,主要用于获取响应头中的Set-Cookie
he = resp.headers['Set-Cookie'].split('; ')[0]  # 使用split函数将Set-Cookie中的sessionid值提取出来
headers['Cookie'] = str(he)              # 将sessionid值写入headers中
headers['user-agent'] = 'yuanrenxue.project'   # 更改UA,用于获取4,5页内容
session.headers.update(headers)          # 更新自己写的headers内容,用于发送第二个请求
resp1 = session.get("https://match.yuanrenxue.cn/api/match/3?page=5")   # 直接试水第五页
print(resp1.text) # 至此,关键部分已经完成,for循环获取数据就比较简单了

成功获取到数据包!

下面是参考文章:

1.headers的顺序性:http请求头的顺序 - 培哥 - 博客园 (cnblogs.com)

2. 用session保持headers的顺序性:requests 发送请求时 保持 headers 的顺序 - 寒菱 - 博客园 (cnblogs.com)

 3.【猿人学WEB题目专解】猿人学第3题_user_from_future的博客-CSDN博客

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值