【发布时间】:2020-12-29 18:02:31
【问题描述】:
我正在尝试获取一个特定的网站,我已经模仿了 Chrome 发送的所有请求标头,但我仍然收到一个永远不会解决的未决承诺。
这是我当前的代码和标题:
const fetch = require('node-fetch');
(async () => {
console.log('Starting fetch');
const fetchResponse = await fetch('https://www.g2a.com/rocket-league-pc-steam-key-global-i10000003107015', {
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
'Accept-Language': 'en-US;q=0.7,en;q=0.3',
'Accept-Encoding': 'gzip, deflate, br'
}
})
console.log('I never see this console.log: ', fetchResponse);
if(fetchResponse.ok){
console.log('ok');
}else {
console.log('not ok');
}
console.log('Leaving...');
})();
这是我可以阅读的控制台日志:
Starting fetch
This is a pending promise: Promise { <pending> }
not ok
Leaving...
有什么我可以在这里做的吗?我注意到对于这个特定网站的类似问题,我只需要使用 Accept-Language 标头,我已经尝试过了,但承诺仍然没有得到解决。
还阅读了另一个问题,即他们对 Node.js 请求具有安全性,也许我需要使用另一种语言?
【问题讨论】:
-
嘿@jonrsharpe 感谢您的回复,我的代码中似乎没有问题我相信我做对了,您是否在上面的代码中发现了不好的地方?承诺永远不会解决,它永远不会进入'then'块。
-
程序没有结束,在最后一个console.log之后停止执行,因为后台有一个promise在等待。
-
如果我使用 await 它在第一个 console.log 之后停止并且永远不会继续,也已经尝试过了。
-
是的,我把代码留在那里,因为我在更改“then”解决方案之前正在等待,它现在什么都不做,就像我现在的问题一样,你是对的.
-
刚刚做了,你可以复制并执行它,你会看到'Starting fetch',没有别的。谢谢。
标签: node.js web-scraping promise fetch