gpt4 book ai didi

javascript - Node.js - https.get() 和 JSON.parse() 使服务器崩溃

转载 作者:行者123 更新时间:2023-12-02 22:46:56 24 4
gpt4 key购买 nike

我已上传测试应用程序。

不幸的是,服务器崩溃了。

这是导致服​​务器崩溃的代码片段:

https.get(`https://www.instagram.com/${username}/?__a=1`, resp => {
resp.on('data', chunk => data.push(chunk));
resp.on('end', () => {
var json = JSON.parse(data.join(''));
done(json.graphql.user);
});
});

这是错误消息:

SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>)
at IncomingMessage.resp.on (/app/app/routes.js:108:33)
at IncomingMessage.emit (events.js:203:15)
at endReadableNT (_stream_readable.js:1145:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
State changed from up to crashed.

代码在 JSON.parse() 上崩溃,但我认为 https.get() 行存在一些错误。不幸的是,我不明白出了什么问题,我已经研究了好几天了。

编辑:更奇怪的是,有时此代码可以正常工作,有时会使服务器崩溃。我的意思是,对于特定的用户名,它可以工作,但对于相同的用户名,它却不能。

最佳答案

据我所知,这是由于这些请求做得太多造成的。您可以通过简单地执行 data.join("") === "" 来检查它是否是有效的响应。 - 适用于除无效用户之外的所有内容 - 为此,您可以检查 data.join("").startsWith("<!DOCTYPE html>") 是否有效

这是因为当您受到限制时,响应只是空的,而当用户无效时,它是以 <!DOCTYPE html> 开头的网站的 HTML 内容。这使我们能够轻松检查它。

检查数据是否有效

if(data.join("") === "" || data.join("").startsWith("<!DOCTYPE html>")) {
console.log("Invalid data!")
}

检查是否是无效用户或您被限制

if(data.join("") === "") {
// throttled
} else if(data.join("").startsWith("<!DOCTYPE html>")) {
// invalid user
} else {
// valid data and user
}

几乎完整的代码

https.get(`https://www.instagram.com/${username}/?__a=1`, resp => {
let data = [];
resp.on('data', chunk => data.push(chunk));

resp.on('end', () => {

if(data.join("") === "") {
// You are being throttled - handle it
} else if(data.join("").startsWith("<!DOCTYPE html>")) {
// The user is invalid - handle it
} else {
// Everything is OK
const json = JSON.parse(data.join(''));
done(json.graphql.user);
}
});
});

关于javascript - Node.js - https.get() 和 JSON.parse() 使服务器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58357398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com