场景: 使用nodejs请求外部网页,要求规定时间内返回
依赖库: http/https
方案:
由于nodejs自身没有对http连接的可配置的超时控制机制,需要自行增加
/**
* if timeout, emit "timeout" event, abort request, and emit "abort" event for response
* @param options
* @param timeout
* @param callback
*/
function httpGetWithTimeoutSupport(options, timeout, callback) {
var timeoutEvent;
var req = http.get(options, function(res) {
res.on("end", function() {
clearTimeout(timeoutEvent);
console.log("end");
})
res.on("close", function(e) {
clearTimeout(timeoutEvent);
console.log("close");
})
res.on("abort", function() {
console.log("abort");
});
callback(res);
});
req.on("timeout", function() {
console.log("timeout received");
if (req.res) {
req.res.emit("abort");
}
req.abort();
});
timeoutEvent = setTimeout(function() {
req.emit("timeout");
}, timeout);
return req;
}
var data = "";
res.on("data", function(d) {
data += d;
});
res.on("end", function() {
console.log(data);
})
});
nodejs自带一个默认的2分钟的强制超时, 见http.js;这个超时会导致close事件发生,错误代码为"timeout". 同时超时是针对连接而非单个的请求的(一个连接上有许多请求).
分享到:
相关推荐
在NodeJS中,HTTP模块是...在实际项目中,你可能还需要考虑错误重试、超时控制以及使用Promise或async/await来管理异步流程。同时,不要忘记替换示例中的`YOUR_API_KEY`为真实的API密钥,以确保能成功调用中国天气API。
- **证书验证**:可以通过配置 `rejectUnauthorized` 来控制是否拒绝非可信的证书。 - **GZIP/DEFLATE 解压**:`urllib` 默认支持 GZIP 和 DEFLATE 压缩格式的解压。 - **URL 解析和构建**:库内集成了 URL 解析...
使用Request.js,开发者可以轻松地设置请求头、超时、代理等参数,非常适合用于集成短信服务提供商的API,以发送和接收验证码。 4. **Unirest.js** Unirest是Mashape公司开发的一套多语言的HTTP客户端库,Unirest....
Node.js 发送 HTTP 请求时遇到 404 长时间未响应的解决方法 Node.js 是一个基于 JavaScript 的服务器端 runtime 环境,它可以用于构建高性能的 Web 服务器。然而,在使用 Node.js 发送 HTTP 请求时,可能会遇到 ...
console.log('响应超时.'); // 如果不提供回调函数,超时后会关闭socket连接 // 这里提供了一个示例,实际上不需要显示地调用res.end() }); setTimeout(function() { // 设置响应头 res.setHeader('Content-...
在标题中提到的 "nodejs-request" 示例代码,很可能是展示如何使用 `request` 模块来发送 HTTP 请求。这个模块提供了丰富的功能,包括 GET、POST、PUT、DELETE 等 HTTP 方法,以及支持自定义头、数据编码、重定向...
尽管有许多网络通信模拟库,但它们倾向于将请求拦截用作实现细节,从而向您展示了一个高级API,其中包括请求匹配,超时,重试等。 这个库是一个条带到骨的实现,它提供了尽可能少的抽象以对NodeJS中的任何请求执
虽然Node.js内置的http模块可以满足基本需求,但实际开发中,更常见的是使用axios或request等成熟的HTTP客户端库。这些库提供了更丰富的功能,如自动处理重定向、超时、请求和响应的编码、支持HTTPS等。 例如,使用...
这两种方法都可以有效地抓取HTML页面内容,但根据实际需求,你可能需要扩展这些基础代码,例如添加错误处理、超时控制、请求重试机制,或者使用更高级的库,如`axios`或`request-promise`,以提高代码的可读性和可...
在实际应用中,确保正确处理各种可能出现的错误是非常重要的,比如网络问题、请求超时、服务器返回错误等。 总结,通过Node.js获取服务器上的HTML文件,需要理解HTTP/HTTPS请求、响应处理以及可能用到的第三方库。...
另外,我们还可以通过设置`server.maxHeadersCount`来限制请求头的数量,或者通过`server.setTimeout()`和`server.timeout`来处理服务器的超时行为。 当编写响应逻辑时,我们通常使用`http.ServerResponse`类的实例...
10. **错误处理与日志记录**: 爬虫运行过程中可能出现各种错误,如网络异常、请求超时等,因此需要编写合适的错误处理逻辑,并记录日志,便于问题排查。 以上就是使用Node.js爬虫爬取小说涉及的一些核心知识点。...
在`index.js`中,你会看到如何使用HTTP请求库(如axios或request)来发送GET或POST请求到快递查询接口。请求中通常会包含快递单号和快递公司代码,接口返回的JSON数据包含了快递包裹的最新跟踪信息。 4. **封装...
GoRequest GoRequest –简化的HTTP客户端(受Node.js中著名的SuperAgent lib的启发)“像机枪一样射击请求”-Gopher发送请求从未像现在这样有趣或容易。 它带有GoRequest GoRequest-简化的HTTP客户端(受Node.js中...
从文件中提供的代码段可以看到,开发者使用http模块的request方法创建了一个请求对象req,这个对象配置了多个选项,包括目标服务器的hostname、端口号port、访问路径path、请求方法method以及刚才提到的headers。...
在`nodejs-requests-master`这个压缩包中,很可能包含了不同HTTP库的示例代码,帮助学习者理解如何在Node.js中使用这些库。通过阅读和实践这些示例,你可以更好地掌握这些库的用法,从而在自己的项目中灵活地进行...
在Node.js中,发起HTTP请求主要使用http模块提供的get()和request()方法。这两个方法的使用场景略有不同,get()方法是对request()的封装,用于发起GET请求,使用起来更为简便。而request()方法则提供更多的灵活性,...
分布式会话管理,包括超时 分布式应用程序范围管理 动态js加载器(lib文件夹) 用户可以设置服务器端脚本的开始和结束标签 每个CPU使用所有内核( nodes设置参数) 当一个人写一个嵌套在标签上的脚本时 他/她可以...
bagpipe允许我们设定并发数和超时时间,从而更精确地控制下载过程,避免单个下载操作过慢影响整体效率。通过设定合适的并发数,可以平衡网络带宽和磁盘IO,从而达到最优的下载速度。 Node.js在批量下载图片时需要...