前言
最近有个客户要求获取百度营销的数据,说是有加密比较复杂。我先来看看情况。
问题分析
打开百度营销,打开数据报告看一下数据。一眼就看到了下载按钮,我就问客户,可以直接下载啊。客户说每天点击下载太麻烦,想要自动操作的程序。OK,Fine.

api分析
翻了两页发现了规律,每次请求reqid都会变化,看来这个就是加密的参数,这里就是客户说的复杂的地方。我现在看看这个参数到底是怎么个事。

reqid参数解密
常规操作,现在搜索里面搜索reqid,看看有哪些js文件有。
好家伙,搜出来了5个结果,一眼看去什么都没有。别说加密结果了,连加密方式也看不出来。这个时候就只能一个个点击进去看看啥情况了。

我们点进去第一个,在文件里搜索repid,发现只有俩结果,那个“o = xxxxx”好像有点意思,下面一行就是“reqid: i”,好像就是我们要找的东西,但是i这个变量也太多了,完全找不到哪个才是我们要的,我们继续看看第二个搜索结果。

第二个结果页面搜索连repid都搜索不到,跳过,看第三个。

第三个有点意思,这里有很多我们请求需要的参数,像token、optid什么的都有,这里值得注意一下。
这里有个“reqid: o ”,然而第875行还有o=xxxx,猜一下,这个应该就是加密的参数了。在这里打一个断点,翻页看一下会不会有结果。

果然,这里就是repid的加密方式了

我们把鼠标放到v.Z上面,弹出来了函数位置,我们点击进去看看。

在这里运行一下,果然就是repid的加密了,我们把代码扣下来,居然加密只有5行。
这次加密麻烦的是如何找到repid的位置,其实解密就很简单。

js加密代码:
function n() {
for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, t = [], n = 0; n
之后调用用python的execjs库就行。