目标参数:x-zse-96
参数分析:
全局搜索x-zse-96,只有两个地方出行,打上断点后刷新网页
从图中断点地方可以看到,搞清楚u()(f()(s))的由来就解决了x-zse-96
可以看到s参数是由以下几部分组成:
1、101_3_2.0(固定版本号) 2、url请求后缀拼接参数 3、cookie里的d_c0字段 4、headers里的
x-zst-81字段。
进一步分析进入f()函数
把相关代码全部扣下来
再返回看u()函数,进入u()函数 ,就是这里
同样从上到下全部抠出来,有点长,截图没截全
自己写一个函数调用刚抠出来的两个函数,要补一下环境
python调用运行测试确实是可以请求到数据,headers和cookies抓包获取
import requests, urllib, execjs
headers = {
}
cookies = {
}
params = {
"t": "general",
"q": "python",
"correction": "1",
"offset": "0",
"limit": "20",
"filter_fields": "",
"lc_idx": "0",
"show_all_topics": "0",
"search_source": "Normal"
}
f = open(r"zse.js", 'r', encoding='UTF-8')
jsstr = f.read()
sign_get = execjs.compile(jsstr, cwd=r'C:\Users\DSY\AppData\Roaming\npm\node_modules')
dd = '101_3_2.0+' + urllib.parse.quote(str(params)) + "+" + cookies["d_c0"] + "+" + headers["x-zst-81"]
a = sign_get.call("get_sig", dd)
headers["x-zse-96"] = a
url = "https://www.zhihu.com"
response = requests.get(url, headers=headers, cookies=cookies, params=params)
print(response.text)
print(response)
楼主是小白,大佬勿喷