也许题目说的还不是很明白,我就说一下我的需求吧
正在写一个爬虫类的NodeJs 程序,
由于有有防爬机制,所有请求需要带上cookie,通过cookie的值计算是sign值,才能正常返回数据, 问题是cookie会过期,如果cookie过期,请求返回失败,但是同时会返回新的cookie,
我的代码逻辑是这样的
class spider {
constructor(){
this.cookie = Cookie.getCookie() //返回Cookie
}
async getData(data){
let url = this.makeUrl(data) //组装url
const response = await request.get(url).setCookie(this.cookie)
if(response.json.sucess){
return reponse.josn //返回正确的数据,直接返回
} else {
//如果cookie 过期,更新cookie并重新请求一次
this.refreshcookie(response)
return this.getData
}
}
refreshcookie(response){
cookie.Update(response) //更据返回更新cookie
this.cookie = cookie.getCookie
}
}
const s = new spider()
async test(page){
const data = s.getData({page: page})
console.log(data
}
test(1)
如果请求一次,代码还是很正常的,如果cookie 程序自动更新cookie,重新请求返回了数据,最多请求2次就可以返回数据,
但是如果我有多个页面要取,
[1,2,3,4,5,6,7,8......100].forEach((page)=>{
test(page)
})
如果cookie无效的话,代码会产生200次请求,因为cookie是在异步代码中更新,所以,前100次请求,全是无效请求
我希望的效果是,如果第1个异步中发现了,cookie无效,直接更新所有的异步代码更新this.cookie的值,有没有好的办法。