逆向20-优志愿
1 分析页面
根据分析-得知sign 加密

copy出curl
import requests
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Content-Type': 'application/json',
'Origin': 'https://pv4y-pc.youzy.cn',
'Pragma': 'no-cache',
'Referer': 'https://pv4y-pc.youzy.cn/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
'u-sign': 'f6a8052b16fbe01064e4c4e86441a642',
'u-token': '',
}
json_data = {
'keyword': '',
'provinceNames': [],
'natureTypes': [],
'eduLevel': '',
'categories': [],
'features': [],
'pageIndex': 2,
'pageSize': 20,
'sort': 11,
}
response = requests.post(
'https://uwf7de983aad7a717eb.youzy.cn/youzy.dms.basiclib.api.college.query',
headers=headers,
json=json_data,
)
print(response.text)
会报错,有两种解决方法,都试试

法一:解决办法
# 将 import requests 换成下面
from curl_cffi import requests
......
response = requests.post(
'https://uwf7de983aad7a717eb.youzy.cn/youzy.dms.basiclib.api.college.query',
headers=headers,
json=json_data,
impersonate="chrome119", # 添加一句
)
法二:
request 发送的时候是json=
python中会对json=后的数据进行json序列化,防止他json序列化我们进行下面的操作
xxx = json.dumps(json_data, separators=(',', ':')) # separators去掉json中的空格
response = requests.post(
......
data=xxx,
)
2 加密流程分析
搜索关键字

刷新-定住

分析这个o函数

看看n的返回值

n(o) 是一个md5的值,我们利用 123456 来判断是一个标准的md5值
扣js
// 自己导入
const CryptoJS = require("crypto-js")
// 修改函数名
function get_sign(e, t) {
var r, i = "9SASji5OWnG41iRKiSvTJHlXHmRySRp1", o = "", a = t || {}, s = (e = e || "").split("?");
if (s.length > 0 && (r = s[1]),
r) {
var u = r.split("&")
, c = "";
u.forEach((function(e) {
var t = e.split("=");
c += "".concat(t[0], "=").concat(encodeURI(t[1]), "&")
}
)),
o = "".concat(_.trimEnd(c, "&"), "&").concat(i)
} else
o = Object.keys(a).length > 0 ? "".concat(JSON.stringify(a), "&").concat(i) : "&".concat(i);
console.log(o)
return o = o.toLowerCase(),
// 引用CryptoJS下面的MD5
CryptoJS.MD5(o).toString()
}
python
import requests
import execjs
import json
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Content-Type': 'application/json',
'Origin': 'https://pv4y-pc.youzy.cn',
'Pragma': 'no-cache',
'Referer': 'https://pv4y-pc.youzy.cn/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
# 'u-sign': 'f6a8052b16fbe01064e4c4e86441a642',
'u-token': '',
}
# 只取第一页数据
json_data = {
'keyword': '',
'provinceNames': [],
'natureTypes': [],
'eduLevel': '',
'categories': [],
'features': [],
'pageIndex': 1,
'pageSize': 20,
'sort': 11,
}
js_code = open("20.js").read()
js_compile = execjs.compile(js_code)
sign = js_compile.call("get_sign", "/youzy.dms.basiclib.api.college.query", json_data)
xxx = json.dumps(json_data, separators=(',', ':'))
headers['u-sign'] = sign
response = requests.post(
'https://uwf7de983aad7a717eb.youzy.cn/youzy.dms.basiclib.api.college.query',
headers=headers,
data=xxx,
)
print(response.text)
python取前10页
import requests
import execjs
import json
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Content-Type': 'application/json',
'Origin': 'https://pv4y-pc.youzy.cn',
'Pragma': 'no-cache',
'Referer': 'https://pv4y-pc.youzy.cn/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
# 'u-sign': 'f6a8052b16fbe01064e4c4e86441a642',
'u-token': '',
}
def get_pages(page):
json_data = {
'keyword': '',
'provinceNames': [],
'natureTypes': [],
'eduLevel': '',
'categories': [],
'features': [],
'pageIndex': page,
'pageSize': 20,
'sort': 11,
}
js_code = open("20.js").read()
js_compile = execjs.compile(js_code)
sign = js_compile.call("get_sign", "/youzy.dms.basiclib.api.college.query", json_data)
xxx = json.dumps(json_data, separators=(',', ':'))
headers['u-sign'] = sign
response = requests.post(
'https://uwf7de983aad7a717eb.youzy.cn/youzy.dms.basiclib.api.college.query',
headers=headers,
data=xxx,
)
print(response.text)
if __name__ == '__main__':
import time
for i in range(1, 10):
get_pages(i)
time.sleep(1)
使用python实现md5
import requests
import execjs
import json
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Content-Type': 'application/json',
'Origin': 'https://pv4y-pc.youzy.cn',
'Pragma': 'no-cache',
'Referer': 'https://pv4y-pc.youzy.cn/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
# 'u-sign': 'f6a8052b16fbe01064e4c4e86441a642',
'u-token': '',
}
def get_pages(page):
json_data = {
'keyword': '',
'provinceNames': [],
'natureTypes': [],
'eduLevel': '',
'categories': [],
'features': [],
'pageIndex': page,
'pageSize': 20,
'sort': 11,
}
import hashlib
json_str = json.dumps(json_data, separators=(',', ':'))
sign_str = json_str + "&" + "9SASji5OWnG41iRKiSvTJHlXHmRySRp1"
sign_str = sign_str.lower()
# 使用md5
md5_hash = hashlib.md5(sign_str.encode('utf-8')).hexdigest()
headers['u-sign'] = md5_hash
response = requests.post(
'https://uwf7de983aad7a717eb.youzy.cn/youzy.dms.basiclib.api.college.query',
headers=headers,
data=json_str,
)
print(response.text)
get_pages(1)

浙公网安备 33010602011771号