Node.js 中 RequestJar 的保存与恢复
RequestJar
本质是包了一层的 CookieJar
。
const { CookieJar } = require('tough-cookie')
const request = require('request')
const fs = require('fs')
const jar = request.jar()
console.log(jar)
// RequestJar {
// _jar: CookieJar { enableLooseMode: true, store: { idx: {} } }
// }
request({
uri: 'https://bilibili.com',
method: 'GET',
jar
}, () => {
console.log(jar)
// RequestJar {
// _jar: CookieJar {
// enableLooseMode: true,
// store: { idx: {
// 'www.bilibili.com': {
// '/': {
// main_confirmation: Cookie="main_confirmation=frxWt59Zmjo3+iQYGP6iYOCJkXro/3BgRTYlWCvsDNc=; Expires=Mon, 24 Aug 2020 20:14:19 GMT; Path=/; HttpOnly; hostOnly=true; aAge=464ms; cAge=466ms"
// }
// }
// } }
// }
// }
// 保存
fs.writeFileSync('cookie.json', stringifyRequestJar(jar))
// 读取
const newJar = parseRequestJar(fs.readFileSync('cookie.json').toString())
console.log(newJar)
})
function stringifyRequestJar (jar) {
const serializedObj = jar._jar.serializeSync()
const jsonStr = JSON.stringify(serializedObj)
return jsonStr
}
function parseRequestJar (serialized) {
const _jar = CookieJar.deserializeSync(serialized)
const jar = request.jar()
jar._jar = _jar
return jar
}