知乎x-zse-96

看到有读者咨询知乎x-zse-96,做一下分析和记录。
在这里插入图片描述


随便找了一个搜视频接口 /api/v4/search_v3

经测试发现,目前请求必带的参数有headers 中的x-zse-96、x-zse-93、x-api-version 和 cookie中的d_c0。 其中 d_c0是由 /udid接口 set-cookie。 第二次访问时 x-zst-81 可以不带。


参数定位

那全局搜关键词 x-zse-96。
file

点进去再搜,可以清晰的看到 l.set("x-zse-96", "2.0" + O) 和 d.set("x-zse-96", "2.0" + E)

两个地方都断点,触发请求。 注意下 e 是否是我们定位的接口URL。

在这里插入图片描述

把此处的 x-zse-96和请求中的对比。

在这里插入图片描述

发现两个是一致的,所以这里就是正确的生成位置。

大概看一下流程: E = S.signature ,S.signature = (0, P(r).encrypt)(f()(s))

在这里插入图片描述


先按流程扣代码 (P( r ).encrypt)(f()(s)) 。

P ( r ) encrypt 对应的D 。
在这里插入图片描述

跳转查看。

在这里插入图片描述

双击后可以复制整段代码。

在这里插入图片描述

D 扣下来的示例:

在这里插入图片描述

f()(s) 这一段是对请求时的一些信息处理后md5。

后面过程太繁琐,不想写了,直接贴代码吧,

大家可以到csdn搜下相关文章,我也参考了别人的内容。


Python调用代码

import requests
import execjs

domain = 'https://www.zhihu.com'
search_api = '/api/v4/search_v3?gk_version=gz-gaokao&t=zvideo&q=%E9%80%86%E5%90%91&correction=1&offset=0&limit=20&filter_fields=&lc_idx=0&show_all_topics=0&search_source=Normal'
search_url = domain+search_api

with open('x-zse-96.js','r',encoding='utf-8') as f:
    js = f.read()
etx = execjs.compile(js)

# d_c0 是服务端返回的,自己请求一个
d_c0 = "AFATiXgZ_BWPTtgq6Lp8yI2EWG9iT6W6BgI=|1670475363"
xzse96 = etx.call('get_xzse96',d_c0,search_api)

headers = {
    "cookie":f"d_c0={d_c0};",
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
    "x-api-version":"3.0.91",
    "x-zse-93":"101_3_3.0",
    "x-zse-96":xzse96,
}

print(requests.get(search_url, headers=headers).text)

JS还原代码

下载地址:

【温馨提示:此处隐藏内容需要付费订阅后才能查看!】

点赞
  1. 流火卧冰说道:
    QQbrowser Windows 10
    :tushe:
  2. Black说道:
    Google Chrome Windows 10
    学习了,希望大佬分享更多的学习案例

发表回复