请求逻辑分析
数据接口为https://match.yuanrenxue.cn/api/match/3?page=1
这一题的 请求参数 与 cookie 都没有加密参数
每次请求数据接口前都会请求 jssm 接口
requests 照着请求逻辑去请求,发现是失败的(数据接口返回包含 js标签 代码)
代码编写
这道题其实检测了请求头的顺序
打开 Fiddler 抓包,查看对应的请求头顺序
jssm 接口的请求头顺序
数据接口的请求头顺序
照着 Fiddler 请求头顺序去构造请求头,构造好之后请求还是一样的不通过
因为 Python 的字典是无序的,要想字典按照构造的顺序去请求,需要使用到 requests.session() 对象
python
import requests
session = requests.session()
session 对象 cookie 设置
python
session.cookies.set("sessionid", "你的sessionid值")
session 对象的 Headers 设置
python
session.headers = {
// 你构造的 headers 字典
}
session 对象发起请求
python
// 请求携带的参数与 requests 对象一样
session.post(...)
session.get(...)
python 代码
python
import requests
session = requests.session()
session.cookies.set("sessionid", "你的sessionid值")
def send_jsm():
session.headers = {
'Connection': 'keep-alive',
'Content-Length': '0',
'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
'sec-ch-ua-platform': '"Windows"',
'Accept': '*/*',
'Origin': 'https://match.yuanrenxue.cn',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://match.yuanrenxue.cn/match/3',
'Accept-Encoding': 'gzip, deflate, br, zstd',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
url = "https://match.yuanrenxue.cn/jssm"
response = session.post(url)
print(response)
def send_match3(page):
session.headers = {
'Connection': 'keep-alive',
'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'X-Requested-With': 'XMLHttpRequest',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
'sec-ch-ua-platform': '"Windows"',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://match.yuanrenxue.cn/match/3',
'Accept-Encoding': 'gzip, deflate, br, zstd',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
url = "https://match.yuanrenxue.cn/api/match/3"
params = {
"page": f'{page}'
}
response = session.get(url, params=params)
print(response.text)
if __name__ == '__main__':
for page in range(1, 6):
send_jsm()
send_match3(page)