京东cookie自动更新维护

京东cookie自动更新维护

orzlee
2021-09-02 / 0 评论 / 3,728 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年09月02日,已超过965天没有更新,若内容或图片失效,请留言反馈。

9BJQUycoguMsovYxJ84M.png

前言

薅羊毛门槛越来越高了,京东cookie目前有效期只有一天,有些甚至更短。之前扫码登陆目前看来已经获取不到cookie了,现在获取cookie相对麻烦不少。

前段时间很忙,最近闲下来折腾下。看到github上有些脚本,可以抓包获取京东APP请求中cookie,突然有个大胆的想法。如果我让脚本把获取的cookie发送到自己的服务器,服务器自动更新维护cookies.list文件,那么每天打开下APP即可。像IOS有快捷指令APP,让它自动化,每天按时打开京东APP更新cookie,让后服务器自动维护岂不美哉!缺点就是每个用户都得有个可以执行脚本的APP。

废话不多说,干就完了

由于我用的是软路由,openwrt上跑docker(没错,还是LXK0301大佬的那套,自不过修修补补勉强用着,不过目前蛮多用什么面板的!),所以要复杂一点,服务器上部署可以少很多步骤。在openwrt上需要开启frp客户端,然后要映射docker容器端口到本地。还需要一台服务器搭建frp,主要是服务端会搭建在openwrt上,方便外网访问API。在openwrt上部署服务端,接收请求更新本地cookie文件就好了。

服务端

服务端不需要太复杂,用node.js弄个简单的就好了,根据cookie中的pt_pin来替换整行cookie(没有新增哦,只能提换已存在的):

const http = require('http')
const fs = require('fs');
const path = require('path')
const file = path.resolve(__dirname, '../logs/cookies.list') //路径不同需要改改,你当期间脚本文件相对路径

function writeCookie(pt_key, pt_pin) {
    const re = new RegExp('.*'+ pt_pin +'.*', 'g')
    const cookie = `${pt_key};${pt_pin};`
    // console.log(re)
    fs.readFile(file,'utf8',function(err,data){
        // console.log('替換前' + data)
        let result = data.replace(re, cookie);
        // console.log('替換後' + result)
        fs.writeFile(file, result, 'utf8', function (err) {
            if (err){
                console.log(err)
            }
        });
    })
}

const server = http.createServer(function(request, response) {
    const contentType = request.headers['content-type']
    // response.setHeader('Content-type', 'application/json')
    // && contentType === 'application/json'
    if (request.method === 'POST' && request.url === '/cookie/update') {
        let body = [];
        request.on('data', (chunk) => {
            body.push(chunk);
        }).on('end', () => {
            // console.log(Buffer.concat(body).toString())
            try {
                body = JSON.parse(Buffer.concat(body).toString());
                if (body.pt_key && body.pt_pin) {
                    writeCookie(body.pt_key, body.pt_pin)
                    // console.log(body.pt_key)
                    response.end('OK');
                } else {
                    response.statusCode = 400;
                    response.end('Invalid param');
                }
            } catch (e) {
                response.statusCode = 400;
                response.end('Invalid param');
            }
        });
    } else {
        response.statusCode = 404;
        response.end();
    }
})

const port = 8888
const host = '0.0.0.0'
server.listen(port, host)
console.log(`Listening at http://${host}:${port}`)

运行 node 脚本名即可启动服务,对于服务器上部署,我还是推荐使用 pm2 来管理 (至于有什么有点,点进去官网了解下吧!):

# 安装
$ npm install pm2@latest -g
# or
$ yarn global add pm2
# 运行
pm2 start 脚本名

客户端

脚本在此 jd_appopen.js, 只需要稍作修改即可:

/*
杀掉后台后打开京东app获取app_open
在脚本日志查看值
[MITM]
hostname = api.m.jd.com
===========Surge=================
[Script]
jd_appopen = type=http-request,pattern=^https:\/\/api\.m\.jd\.com\/openUpgrade, max-size=0, script-path=jd_appopen.js
===================Quantumult X=====================
[rewrite_local]
# jd_appopen
^https:\/\/api\.m\.jd\.com\/openUpgrade url script-request-header jd_appopen.js
=====================Loon=====================
[Script]
http-request ^https:\/\/api\.m\.jd\.com\/openUpgrade script-path=jd_appopen.js, timeout=3600, tag=jd_appopen
*/

const $ = new Env("app_open")

if ($request.headers) {
    let cookie = ($request.headers.Cookie || $request.headers['Cookie'] || $request.headers['cookie'] || '')
    let pt_key = cookie.match(/(pt_key=[^;]*)/)[1]
    let pt_pin = cookie.match(/(pt_pin=[^;]*)/)[1]
    if (pt_key && pt_pin) {
        console.log('================')
        console.log(`${pt_key};${pt_pin};`)
        console.log('================')

        const options = {
            "url": `换成你的域名/cookie/update`,
            'body': JSON.stringify({
                "pt_key": pt_key,
                "pt_pin": pt_pin
            })
        }
        $.post(options, (err, resp, data) => {
            try {
                if (err) {
                    $.msg("app_open获取成功!", `更新cookie失败: ${JSON.stringify(err)}`)
                    console.log(`pp_open获取成功,更新cookie失败: ${JSON.stringify(err)}`)
                } else {
                    console.log(`更新cookie: ${data}`)
                }
            } catch (e) {
                $.logErr(e, resp)
            }
        })
    }
}

$.done($request.headers)

...

然后使用你手机APP(Surge、Quantumult X、Loon、shadowrocket)添加即可,shadowrocket我试过也可以,成本相对其他app应该便宜点!

IOS快捷指令

在快捷指令APP中添加个自动化,运行前询问看自己情况开启,这里的shadowrocket可以换成其他执行脚本APP,如果你跑脚本的APP常驻打开那么就可以删掉shadowrocket部分,启动此自动化需要打开
kj-1.png
kj-2.png

快捷指令有个缺点,不是所有自动化都可以锁屏运行,像这个也是,但是会发送通知,点击通知就可以,或者自己不使用,每天自己手动也是一样的!

结语

没有写很详细,这些也就是大概思路,还有很多值得优化的地方。京东这次动作能刷下不少代挂了,操作成本太高了。对于三五个好友玩玩还行。如果喜欢折腾的应该能按照思路完善吧,写得太详细有时候真不是件好事!

0
取消
扫码打赏
支付金额随意哦!

评论 (0)

取消