参考了好几篇文章,包含代码并且可运行的有点难找,这里推荐两篇:

锦楠:2021年6月知乎指定问题信息爬取 & x-zse-96 2.0版本加密破解分析 爬虫破解反扒思路
本文代码就是复制自锦楠这一篇,只做了很小的完善

从删库到跑路*:知乎x-zse-96参数解密

如下是获取x-zse-96的js代码,只需要修改d_c0和api就可以直接运行:

如果缺少模块的话,缺哪个就安装哪个
npm install jsdom
npm install md5-node

const jsdom = require("jsdom");
const md5 = require('md5-node');
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest;var exports = {}
function t(e) {return (t = "function" == typeof Symbol && "symbol" == typeof Symbol.A ? function (e) {return typeof e;}: function (e) {return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e})(e)
}
Object.defineProperty(exports, "__esModule", {value: !0
});
var A = "2.0", __g = {};
function s() { }
function i(e) {this.t = (2048 & e) >> 11,this.s = (1536 & e) >> 9,this.i = 511 & e,this.h = 511 & e
}
function h(e) {this.s = (3072 & e) >> 10,this.h = 1023 & e
}
function a(e) {this.a = (3072 & e) >> 10,this.c = (768 & e) >> 8,this.n = (192 & e) >> 6,this.t = 63 & e
}
function c(e) {this.s = e >> 10 & 3,this.i = 1023 & e
}
function n() { }
function e(e) {this.a = (3072 & e) >> 10,this.c = (768 & e) >> 8,this.n = (192 & e) >> 6,this.t = 63 & e
}
function o(e) {this.h = (4095 & e) >> 2,this.t = 3 & e
}
function r(e) {this.s = e >> 10 & 3,this.i = e >> 2 & 255,this.t = 3 & e
}
s.prototype.e = function (e) {e.o = !1
},i.prototype.e = function (e) {switch (this.t) {case 0:e.r[this.s] = this.i;break;case 1:e.r[this.s] = e.k[this.h]}},h.prototype.e = function (e) {e.k[this.h] = e.r[this.s]},a.prototype.e = function (e) {switch (this.t) {case 0:e.r[this.a] = e.r[this.c] + e.r[this.n];break;case 1:e.r[this.a] = e.r[this.c] - e.r[this.n];break;case 2:e.r[this.a] = e.r[this.c] * e.r[this.n];break;case 3:e.r[this.a] = e.r[this.c] / e.r[this.n];break;case 4:e.r[this.a] = e.r[this.c] % e.r[this.n];break;case 5:e.r[this.a] = e.r[this.c] == e.r[this.n];break;case 6:e.r[this.a] = e.r[this.c] >= e.r[this.n];break;case 7:e.r[this.a] = e.r[this.c] || e.r[this.n];break;case 8:e.r[this.a] = e.r[this.c] && e.r[this.n];break;case 9:e.r[this.a] = e.r[this.c] !== e.r[this.n];break;case 10:e.r[this.a] = t(e.r[this.c]);break;case 11:e.r[this.a] = e.r[this.c] in e.r[this.n];break;case 12:e.r[this.a] = e.r[this.c] > e.r[this.n];break;case 13:e.r[this.a] = -e.r[this.c];break;case 14:e.r[this.a] = e.r[this.c] < e.r[this.n];break;case 15:e.r[this.a] = e.r[this.c] & e.r[this.n];break;case 16:e.r[this.a] = e.r[this.c] ^ e.r[this.n];break;case 17:e.r[this.a] = e.r[this.c] << e.r[this.n];break;case 18:e.r[this.a] = e.r[this.c] >>> e.r[this.n];break;case 19:e.r[this.a] = e.r[this.c] | e.r[this.n];break;case 20:e.r[this.a] = !e.r[this.c]}},c.prototype.e = function (e) {e.Q.push(e.C),e.B.push(e.k),e.C = e.r[this.s],e.k = [];for (var t = 0; t < this.i; t++)e.k.unshift(e.f.pop());e.g.push(e.f),e.f = []},n.prototype.e = function (e) {e.C = e.Q.pop(),e.k = e.B.pop(),e.f = e.g.pop()},e.prototype.e = function (e) {switch (this.t) {case 0:e.u = e.r[this.a] >= e.r[this.c];break;case 1:e.u = e.r[this.a] <= e.r[this.c];break;case 2:e.u = e.r[this.a] > e.r[this.c];break;case 3:e.u = e.r[this.a] < e.r[this.c];break;case 4:e.u = e.r[this.a] == e.r[this.c];break;case 5:e.u = e.r[this.a] != e.r[this.c];break;case 6:e.u = e.r[this.a];break;case 7:e.u = !e.r[this.a]}},o.prototype.e = function (e) {switch (this.t) {case 0:e.C = this.h;break;case 1:e.u && (e.C = this.h);break;case 2:e.u || (e.C = this.h);break;case 3:e.C = this.h,e.w = null}e.u = !1},r.prototype.e = function (e) {switch (this.t) {case 0:for (var t = [], n = 0; n < this.i; n++)t.unshift(e.f.pop());e.r[3] = e.r[this.s](t[0], t[1]);break;case 1:for (var r = e.f.pop(), o = [], i = 0; i < this.i; i++)o.unshift(e.f.pop());e.r[3] = e.r[this.s][r](o[0], o[1]);break;case 2:for (var a = [], c = 0; c < this.i; c++)a.unshift(e.f.pop());e.r[3] = new e.r[this.s](a[0], a[1])}};
var k = function (e) {for (var t = 66, n = [], r = 0; r < e.length; r++) {var o = 24 ^ e.charCodeAt(r) ^ t;n.push(String.fromCharCode(o)),t = o}return n.join("")
};
function Q(e) {this.t = (4095 & e) >> 10,this.s = (1023 & e) >> 8,this.i = 1023 & e,this.h = 63 & e
}
function C(e) {this.t = (4095 & e) >> 10,this.a = (1023 & e) >> 8,this.c = (255 & e) >> 6
}
function B(e) {this.s = (3072 & e) >> 10,this.h = 1023 & e
}
function f(e) {this.h = 4095 & e
}
function g(e) {this.s = (3072 & e) >> 10
}
function u(e) {this.h = 4095 & e
}
function w(e) {this.t = (3840 & e) >> 8,this.s = (192 & e) >> 6,this.i = 63 & e
}
function G() {this.r = [0, 0, 0, 0],this.C = 0,this.Q = [],this.k = [],this.B = [],this.f = [],this.g = [],this.u = !1,this.G = [],this.b = [],this.o = !1,this.w = null,this.U = null,this.F = [],this.R = 0,this.J = {0: s,1: i,2: h,3: a,4: c,5: n,6: e,7: o,8: r,9: Q,10: C,11: B,12: f,13: g,14: u,15: w}
}
Q.prototype.e = function (e) {switch (this.t) {case 0:e.f.push(e.r[this.s]);break;case 1:e.f.push(this.i);break;case 2:e.f.push(e.k[this.h]);break;case 3:e.f.push(k(e.b[this.h]))}
},C.prototype.e = function (A) {switch (this.t) {case 0:var t = A.f.pop();A.r[this.a] = A.r[this.c][t];break;case 1:var s = A.f.pop(), i = A.f.pop();A.r[this.c][s] = i;break;case 2:var h = A.f.pop();A.r[this.a] = eval(h)}},B.prototype.e = function (e) {e.r[this.s] = k(e.b[this.h])},f.prototype.e = function (e) {e.w = this.h},g.prototype.e = function (e) {throw e.r[this.s]},u.prototype.e = function (e) {var t = this, n = [0];e.k.forEach(function (e) {n.push(e)});var r = function (r) {var o = new G;return o.k = n,o.k[0] = r,o.v(e.G, t.h, e.b, e.F),o.r[3]};r.toString = function () {return "() { [native code] }"},e.r[3] = r},w.prototype.e = function (e) {switch (this.t) {case 0:for (var t = {}, n = 0; n < this.i; n++) {var r = e.f.pop();t[e.f.pop()] = r}e.r[this.s] = t;break;case 1:for (var o = [], i = 0; i < this.i; i++)o.unshift(e.f.pop());e.r[this.s] = o}},G.prototype.D = function (e) {for (var t = window.atob(e), n = t.charCodeAt(0) << 8 | t.charCodeAt(1), r = [], o = 2; o < n + 2; o += 2)r.push(t.charCodeAt(o) << 8 | t.charCodeAt(o + 1));this.G = r;for (var i = [], a = n + 2; a < t.length;) {var c = t.charCodeAt(a) << 8 | t.charCodeAt(a + 1), s = t.slice(a + 2, a + 2 + c);i.push(s),a += c + 2}this.b = i},G.prototype.v = function (e, t, n) {for (t = t || 0,n = n || [],this.C = t,"string" == typeof e ? this.D(e) : (this.G = e,this.b = n),this.o = !0,this.R = Date.now(); this.o;) {var r = this.G[this.C++];if ("number" != typeof r)break;var o = Date.now();if (500 < o - this.R)return;this.R = o;try {this.e(r)} catch (e) {this.U = e,this.w && (this.C = this.w)}}},G.prototype.e = function (e) {var t = (61440 & e) >> 12;new this.J[t](e).e(this)},"undefined" != typeof window && (new G).v("AxjgB5MAnACoAJwBpAAAABAAIAKcAqgAMAq0AzRJZAZwUpwCqACQACACGAKcBKAAIAOcBagAIAQYAjAUGgKcBqFAuAc5hTSHZAZwqrAIGgA0QJEAJAAYAzAUGgOcCaFANRQ0R2QGcOKwChoANECRACQAsAuQABgDnAmgAJwMgAGcDYwFEAAzBmAGcSqwDhoANECRACQAGAKcD6AAGgKcEKFANEcYApwRoAAxB2AGcXKwEhoANECRACQAGAKcE6AAGgKcFKFANEdkBnGqsBUaADRAkQAkABgCnBagAGAGcdKwFxoANECRACQAGAKcGKAAYAZx+rAZGgA0QJEAJAAYA5waoABgBnIisBsaADRAkQAkABgCnBygABoCnB2hQDRHZAZyWrAeGgA0QJEAJAAYBJwfoAAwFGAGcoawIBoANECRACQAGAOQALAJkAAYBJwfgAlsBnK+sCEaADRAkQAkABgDkACwGpAAGAScH4AJbAZy9rAiGgA0QJEAJACwI5AAGAScH6AAkACcJKgAnCWgAJwmoACcJ4AFnA2MBRAAMw5gBnNasCgaADRAkQAkABgBEio0R5EAJAGwKSAFGACcKqAAEgM0RCQGGAYSATRFZAZzshgAtCs0QCQAGAYSAjRFZAZz1hgAtCw0QCQAEAAgB7AtIAgYAJwqoAASATRBJAkYCRIANEZkBnYqEAgaBxQBOYAoBxQEOYQ0giQKGAmQABgAnC6ABRgBGgo0UhD/MQ8zECALEAgaBxQBOYAoBxQEOYQ0gpEAJAoYARoKNFIQ/zEPkAAgChgLGgkUATmBkgAaAJwuhAUaCjdQFAg5kTSTJAsQCBoHFAE5gCgHFAQ5hDSCkQAkChgBGgo0UhD/MQ+QACAKGAsaCRQCOYGSABoAnC6EBRoKN1AUEDmRNJMkCxgFGgsUPzmPkgAaCJwvhAU0wCQFGAUaCxQGOZISPzZPkQAaCJwvhAU0wCQFGAUaCxQMOZISPzZPkQAaCJwvhAU0wCQFGAUaCxQSOZISPzZPkQAaCJwvhAU0wCQFGAkSAzRBJAlz/B4FUAAAAwUYIAAIBSITFQkTERwABi0GHxITAAAJLwMSGRsXHxMZAAk0Fw8HFh4NAwUABhU1EBceDwAENBcUEAAGNBkTGRcBAAFKAAkvHg4PKz4aEwIAAUsACDIVHB0QEQ4YAAsuAzs7AAoPKToKDgAHMx8SGQUvMQABSAALORoVGCQgERcCAxoACAU3ABEXAgMaAAsFGDcAERcCAxoUCgABSQAGOA8LGBsPAAYYLwsYGw8AAU4ABD8QHAUAAU8ABSkbCQ4BAAFMAAktCh8eDgMHCw8AAU0ADT4TGjQsGQMaFA0FHhkAFz4TGjQsGQMaFA0FHhk1NBkCHgUbGBEPAAFCABg9GgkjIAEmOgUHDQ8eFSU5DggJAwEcAwUAAUMAAUAAAUEADQEtFw0FBwtdWxQTGSAACBwrAxUPBR4ZAAkqGgUDAwMVEQ0ACC4DJD8eAx8RAAQ5GhUYAAFGAAAABjYRExELBAACWhgAAVoAQAg/PTw0NxcQPCQ5C3JZEBs9fkcnDRcUAXZia0Q4EhQgXHojMBY3MWVCNT0uDhMXcGQ7AUFPHigkQUwQFkhaAkEACjkTEQspNBMZPC0ABjkTEQsrLQ==");
var b = function (e) {return __g._encrypt(encodeURIComponent(e))
};
exports.ENCRYPT_VERSION = A,
exports.default = b
//==================相对于锦楠的代码改动如下:=================
function signature(e) {console.log(e);// console.log(encodeURIComponent(e));return __g._encrypt(encodeURIComponent(e))
};
function myMd5(api,dc0) {const str1 = "101_3_2.0";const str2 = api;const str3 = "\""+dc0+"\"";const str4 = "3_2.0aR_sn77yn6O92wOB8hPZnQr0EMYxc4f18wNBUgpTe7tue_tyK6P0E09y-LS9-hp1DufI-we8gGHPgJO1xuPZ0GxCTJHR7820XM20cLRGDJXfgGCBxupMuD_Ie8FL7AtqM6O1VDQyQ6nxrRPCHukMoCXBEgOsiRP0XL2ZUBXmDDV9qhnyTXFMnXcTF_ntRueThTgYygpY3wXVrLS_5Utf2BLLrcNO6Tc9RJSLuvH_qBO1FJLMGRoqgDU_LhCPv0oVj9SVECOyngg_oQXGfvxmJrOmVhpMQMO_DCY9DvwCVreLIBCyEBpBeuw0cBtBJuYmZD3mNbu1TDpsSwe_FCpqQccCWhYB-uFMxCNMc0oBbRY1LJO05qfzeQCYghVx_9FGwUOZNqrGAupxwDS_GXS0QAp96MVKcGc_TDV91bc_rDeXoqFqmcH1ucV8ki3Kc0pYRCCMCgpYeqop69CLJvXG3cr1LbNO1rxMuhLLoBHC";const str = str1+"+"+str2+"+"+str3+"+"+str4;return md5(str);
}
//修改地方1
let api = "/api/v4/members/xxxxxxxxx/answers?include=data%5B*%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cattachment%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Cmark_infos%2Ccreated_time%2Cupdated_time%2Creview_info%2Cexcerpt%2Cis_labeled%2Clabel_info%2Crelationship.is_authorized%2Cvoting%2Cis_author%2Cis_thanked%2Cis_nothelp%2Cis_recognized%3Bdata%5B*%5D.vessay_info%3Bdata%5B*%5D.author.badge%5B%3F%28type%3Dbest_answerer%29%5D.topics%3Bdata%5B*%5D.author.vip_info%3Bdata%5B*%5D.question.has_publishing_draft%2Crelationship&offset=0&limit=20&sort_by=created";
//修改地方2
let dc0 = "AECQu2O0vxSPTs-ZC1UQWQCT9XeGrBjA070=|164xxxxxxx";
function myEncrypt(api,dc0) {let md5Value = myMd5(api,dc0)// console.log("md5:"+md5Value)let zse96 = "2.0_"+signature(md5Value)console.log("zse96:"+zse96)return zse96;
}
//记得修改上面两个地方
myEncrypt(api,dc0)

简单总结

至少在今天 2022年4月8日21:16:41,
x-zse-96 = 知乎内置加密函数( MD5函数( zse93+api+d_c0+zst81 ) )
对应到代码即 x-zse-96 = signature( myMd5( str1,str2,str3,str4 ) )

其中zst81似乎是个可以不同但可以固定的值,应该只要你请求头里带了,服务端能再根据你带的这个zst81和其他参数,做同样的加密后得到zse96即可

但愿能帮助到你~

知乎爬虫请求头参数x-zse-96(代码可直接运行)相关推荐

  1. 生成的头_Python爬虫偷懒神器!快速一键生成Python爬虫请求头

    今天介绍个神奇的网站!堪称爬虫偷懒的神器! 我们在写爬虫,构建网络请求的时候,不可避免地要添加请求头( headers ),以 mdn 学习区为例,我们的请求头是这样的: 一般来说,我们只要添加 us ...

  2. python爬虫请求头是什么意思_python爬虫请求头的使用

    这篇文章我们来讲一下在网站建设中,python爬虫请求头的使用.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 爬虫请求头 网页获取: 通过urlopen来进行获取 requ ...

  3. python在线爬虫_Python爬虫偷懒神器!快速一键生成Python爬虫请求头

    今天介绍个神奇的网站!堪称爬虫偷懒的神器! 我们在写爬虫,构建网络请求的时候,不可避免地要添加请求头( headers ),以 mdn 学习区为例,我们的请求头是这样的: 一般来说,我们只要添加 us ...

  4. OkHttp如何移除User-Agent,Accept-Encoding等框架自动添加的请求头参数

    使用OkHttp网络框架在进行网络请求时会发现,传到后台的请求头中会比我们自己添加的参数多出几个额外参数.查看源码会发现 private Response getResponseWithInterce ...

  5. swagger ui 怎么输入对象_java swagger ui 添加header请求头参数的方法

    我用到的swagger 主要有三款产品,swagger editor,swagger ui 和swagger codegen. swagger editor:主要是一个本地客户端,用来自己添加api, ...

  6. python request 请求头_python爬虫请求头如何设置?

    一.requests设置请求头: import requests url="http://www.targetweb.com" headers={ 'Accept':'text/h ...

  7. requests爬虫请求头获得方法

    requests爬虫请求头获得方法 以Chrome为例: 首先,随便打开一个网页,Ctrl+Shift+I:检查快捷键,之后会弹出一个窗口,类似于这样: 之后,第二步,按照屏幕中间的提示:Ctrl+R ...

  8. 知乎爬虫最新 x-zse-96参数解密教程

    知乎x-zse-96解密 抓包分析网页 分析Requests Headers里面的参数 这儿可以发现,在Request请求头里面有一个x-zse-96参数是每次AJAX请求后都会验证的一个参数,如果想 ...

  9. 怎样在接口地址中添加请求头参数_jmeter5.3做soap接口性能测试配置

    前言 soap的格式在现有的测试中基本很难遇到了,小编也是第一次接触soap接口,在解决问题之前,也是想破脑袋,所以发表出来希望大家能少踩一点坑.首先在操作jmeter之前,我们需要将soap的报文. ...

最新文章

  1. python中不能使用索引运算的是_Python数据分析之Pandas库(笔记)
  2. 火车站购票系统c语言编程,用c语言编写火车购票系统怎么编写,在线等,急!!!...
  3. mysql explain字段含义,MySQL(十七):EXPLAIN 输出信息之 Extra 字段解释
  4. 【重大修改】动态时间规整(Dynamic Time Warping)
  5. 一个路由器两个网段互通_如何判断两个IP地址是否在同一个网段?什么是子网掩码?...
  6. 数据可视化详解+代码演练
  7. CollectionBase的使用
  8. Android7.1 音频声音控制策略
  9. vue-router自动判断左右翻页转场动画
  10. 【XLSX】Excel表格的导入和导出
  11. 2021年下半年市场营销案例分析集锦
  12. 关于工作总结中的感悟
  13. 【光模块单模和多模的区别及使用】
  14. trip计算机英语作文,mytrip英语作文,my trip to英语作文80!
  15. 命令行登录和退出MySQL
  16. 重庆科技学院数理学院mysql的期末考试_数据库期末考试重庆科技学院A.doc
  17. chrome自制插件--百度搜索结果去广告1.0
  18. linux dhcp 安装系统,Linux上基于网络自动化安装系统(CentOS6.5+DHCP+TFTP+PXE)
  19. 青岛计算机考试试题,2016年计算机一级上机考试题「word版」
  20. 被was坑惨了,websphere下面报webapp.WebApp logError SRVE0293E: [Servlet Error]-[null]错误。

热门文章

  1. java压缩pdf大小_如何使用pdfbox或其他java库减小合并的PDF / A-1b文件的大小
  2. csdn邻家割草_如何维护割草机,使其永远持续(几乎)
  3. 浅谈阿里云混合云新一代运维平台演进与实践
  4. 科研论文里的paired t-test
  5. 牛市真的来了吗?牛市还能留多久?
  6. 在线装机测试软件,完美装机大师工具V3.0专业版
  7. 微商扫码发货管理系统开发
  8. 一文学会会计记账-会计科目、借贷关系和会计分录的小白理解
  9. android 工程师级别划分及学习路线
  10. 【BC260Y】 AT指令接入移动oneNet平台流程