我一直在测试一个大型站点地图,与这个问题相同here.
在某种程度上,答案效果很好,然后开始收到状态代码 429,这是因为该网站认为我正在进行拒绝服务攻击。
如何克服这个问题?
cy.request('sitemap.xml')
.then(response => {
return Cypress.$(response.body).find('loc')
.toArray().map(el => el.innerText)
})
.then(urls => {
urls.forEach(url => {
cy.request({url, failOnStatusCode: false})
.then(response => results.push({url, status: response.status}))
})
})
})
要限制请求的速率,只需添加cy.wait()
在循环。
等待时间取决于最大请求率,例如 StackOverflow 的限制为每秒 30 个请求,因此我将等待 50 毫秒。
您还可以对代码进行其他一些优化
const results = [];
cy.request('sitemap.xml')
.its('body')
.then(xml => {
return [...Cypress.$(xml).find('loc')].map(el => el.innerText)
})
.then(urls => {
urls.forEach(url => {
cy.request({
method:'HEAD',
url,
failOnStatusCode:false,
log:false
})
.then(response => {
console.log(url) // progress
if (response.status !== 200) {
results.push({url, status: response.status})) // fails only
}
})
cy.wait(50,{log:false}) // throttle
})
})
cy.then(() => {
cy.log('Bad URLs', results)
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)