能否绕过Cloudflare?或寻求替代方法运行指定Node.js请求代码
绕过Cloudflare并请求cs.money接口的可行方案
你用request库直接请求被Cloudflare拦截太正常了——Cloudflare会检测请求的浏览器特征、JS渲染能力这些,普通HTTP请求根本躲不过。下面给你几个实用的解决办法:
1. 用专门绕Cloudflare的HTTP库:cloudscraper
cloudscraper是Node.js生态里专门针对Cloudflare防护的工具,它会自动处理Cloudflare的JS验证、Cookie生成这些步骤,用法和request差不多,上手成本极低。
先安装依赖
npm install cloudscraper
替换后的请求代码(index.js)
const cloudscraper = require('cloudscraper'); cloudscraper.get('https://cs.money/load_bots_inventory?hash=1521879336025', { json: true }) .then(body => { console.log(body); console.log(body.explanation); }) .catch(err => { console.error('请求失败:', err); });
2. 用无头浏览器模拟真实用户行为:Puppeteer
如果cloudscraper哪天失效了,就用Puppeteer启动一个无头Chrome,完全模拟真实用户的浏览流程——Cloudflare几乎识别不了这种请求。
安装依赖
npm install puppeteer
示例代码
const puppeteer = require('puppeteer'); async function fetchInventory() { const browser = await puppeteer.launch({ headless: 'new' }); // 用新版无头模式更隐蔽 const page = await browser.newPage(); // 设置真实Chrome的用户代理,避免被识别 await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'); try { await page.goto('https://cs.money/load_bots_inventory?hash=1521879336025', { waitUntil: 'networkidle2' }); // 提取页面返回的纯JSON数据 const bodyText = await page.evaluate(() => document.body.textContent); const body = JSON.parse(bodyText); console.log(body); console.log(body.explanation); } catch (err) { console.error('请求出错:', err); } finally { await browser.close(); } } fetchInventory();
额外注意点
- 别薅太狠:哪怕绕了Cloudflare,频繁请求还是会被cs.money自身的反爬限制,记得加合理的请求间隔。
- 遵守规则:爬取前先看看cs.money的服务条款和
robots.txt,别踩法律红线。 - 你的
server.js代码片段不全,如果要把请求集成到HTTP服务里,别用eval直接执行index.js,应该把请求逻辑放到路由处理函数里,这样才会在每次收到用户请求时执行。
内容的提问来源于stack exchange,提问作者Andrew Kasyanov
相关产品推荐
相关产品推荐

