为什么我无法获取网页(使用 NodeJS 和 Node-Fetch)?

Why Can't I Fetch a Webpage (With NodeJS and Node-Fetch)?

我正在尝试获取网站:link here。如果单击 link,它会显示 JSON:{"error":"Socket Error"}。我正在尝试获取该网站,return 错误。

但是,我收到 403 Forbidden 错误。是否有一个原因?我关闭了 CORS,但我认为它没有任何作用。这是我尝试过的示例:

async function b(){
  error = await fetch('https://matchmaker.krunker.io/seek-game?hostname=krunker.io&region=us-ca-sv&game=SV%3A4jve9&autoChangeGame=false&validationToken=QR6beUGVKUKkzwIsKhbKXyaJaZtKmPN8Rwgykea5l5FkES04b6h1RHuBkaUMFnu%2B&dataQuery=%7B%7D', {mode:'no-cors'}).then(res=>res.json())
  console.log(JSON.stringify(error))
}
b()

为什么似乎没有任何效果? 如果有任何我需要添加的内容,请发表评论,这是我的第一个 Stack Overflow post 所以我仍然对什么是一个好问题感到困惑。感谢帮助!!

注意:我的环境是 Node.JS(在 Repl.it 上测试,我认为它使用最新的 Node 版本)。

此特定主机受到保护宽度 Cloudflare 反 DDoS 保护。服务器不接受 fetch 发出的请求,但接受来自 curl 的请求。天知道为什么。

$ curl 'https://matchmaker.krunker.io/seek-game?hostname=krunker.io&region=us-ca-sv&game=SV%3A4jve9&autoChangeGame=false&validationToken=QR6beUGVKUKkzwIsKhbKXyaJaZtKmPN8Rwgykea5l5FkES04b6h1RHuBkaUMFnu%2B&dataQuery=%7B%7D'

// => {"error":"Socket Error"}

您可以在 node.js 中将 curlnode-libcurl 包一起使用。

const { curly } = require('node-libcurl')
const url = 'https://matchmaker.krunker.io/seek-game?hostname=krunker.io&region=us-ca-sv&game=SV%3A4jve9&autoChangeGame=false&validationToken=QR6beUGVKUKkzwIsKhbKXyaJaZtKmPN8Rwgykea5l5FkES04b6h1RHuBkaUMFnu%2B&dataQuery=%7B%7D'

curly.get(url)
    .then(({ statusCode, data }) => console.log(statusCode, data))

// => 400 { error: 'Socket Error' }

按预期工作:-)

您可以使用 allorigins.win 等代理,它是一个 cors 代理,可以 json 的形式从 URL 检索数据。您可以从这个 URL 中获取:https://api.allorigins.win/raw?url=https://matchmaker.krunker.io/game-list?hostname=krunker.io