我正在使用NodeJs发布请求。下面是我的代码:
var request = require('request');
var rp = require('request-promise');
async function sendRequest(obj){
try{ // TRY STARTS HERE
var requestTarget = await rp({
method: 'POST',
uri: obj.url,
headers: {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9,ar-AE;q=0.8,ar;q=0.7",
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"99\", \"Google Chrome\";v=\"99\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"macOS\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
"cookie":obj.cookie,
"Referer":obj.referer ,
"Referrer-Policy": "strict-origin-when-cross-origin"
},
timeout:16000,
body : obj.body
}).then(
(response)=>{
return response
})
// TRY ENDS HERE
}catch(error){ // catch STARTS HERE
console.error( " error is :" +error);
}// catch ENDS HERE
console.log(" response is : " +requestTarget);
}
不管怎样,我遇到了请求的问题:连接ETIMEDOUT时,我运行的代码,我不知道如何修复它。
什么原因会导致此错误?这个服务器怎么用?
3条答案
按热度按时间qyzbxkaa1#
ETIMEDOUT
意味着服务器在给定的超时时间(在示例中为16秒)内没有响应您的请求。该错误可以在catch块中处理。6jygbczu2#
您的问题标题提到您认为您的目标服务器过载。在这种情况下可能会出现ETIMEDOUT错误。拒绝服务攻击?
在尝试出站连接的代码中,除了捕获错误、等待一段时间并重试之外,您没有太多可以做的事情。
理想情况下,每次连续捕获错误时,在重试之前都要等待两倍的时间。对于第一个等待,使用一秒钟。然后等待2、4、8、16等等。您希望给予目标服务器有机会通过它的连接队列工作,而敲打它会减慢该进程。
一分钟后,你应该给予。如果您有错误日志记录系统,请将错误提交到错误日志记录系统。如果你的服务是一个Web服务,你的客户端会收到一个500(一般服务器错误)、502(到上游服务器的网关坏了)或504(上游服务器超时),这取决于你的应用程序。
如果您还控制目标服务器,您可以弄清楚那里发生了什么。您可能需要更多的容量。或者一个流氓客户可能会对目标造成很大的打击。您的目标可能正在遭受拒绝服务攻击。
处理ETIMEDOUT错误是xxx中的一个难题。如果您的服务不是关键任务型的,并且这种情况不经常发生,您可以简单地向客户端发出500、502或504错误。但是,不要忘记记录错误:解决这种情况可能需要人为干预。
xpszyzbs3#
因为端口被阻塞,所以发生了错误。请检查端口是否已启用。