http.request 请求设置超时
时间: 2024-12-16 19:17:47 浏览: 12
在 Node.js 中,如果你需要通过 `http.request()` 发送 HTTP 请求,并希望设置请求超时,你可以使用 `setTimeout()` 和 `abort()` 方法配合。`http.request()` 返回的是一个 `http.ClientRequest` 对象,它有一个 `timeout` 属性可以设定默认的超时时间,但如果需要更精细的控制,可以在发送请求前设置。
下面是一个简单的示例:
```javascript
const http = require('http');
const options = {
hostname: 'example.com',
port: 80,
path: '/your-path',
method: 'GET',
timeout: 5000, // 默认超时时间为5秒,单位为毫秒
};
const req = http.request(options, (res) => {
// 处理响应
});
req.on('socket', (socket) => {
socket.setTimeout(5000); // 设置连接超时
socket.on('timeout', () => {
console.log('Request timed out after 5 seconds.');
req.abort(); // 如果连接超时,立即中断请求
});
});
req.on('error', (error) => {
if (error.code === 'ETIMEDOUT') {
console.log('Request timed out due to a network issue.');
} else {
console.error('An unexpected error occurred:', error);
}
});
req.end();
```
在这个例子中,首先设置了全局的请求超时时间(5秒)。然后,当请求的 `socket` 上创建时,我们再次设置了连接的超时时间。如果连接在5秒内没有完成,`socket.timeout` 事件会被触发,此时会立即调用 `req.abort()` 来终止请求。
请注意,不是所有的网络状况都能精确预知超时时间,例如DNS解析或网络延迟等,所以设置合理的超时值是非常重要的。
阅读全文