Hola,
muy fácil de reproducir y siempre sucede!
const request = require('request');
const axios = require('axios');
const url = 'http://www.bestbuy.com/';
request({
url: url,
timeout: 5000
}, (error, response, body) => {
if (!error)
console.log(`request got ${response.statusCode}`);
else
console.error(`request got an error`, error);
});
axios.get(url).then((ret) => {
console.log(`Axios got ${ret.status}`);
});
salidas:
Axios got 200
request got an error { Error: ESOCKETTIMEDOUT
at ClientRequest.<anonymous> (/Users/amir/dev/test/testVideosFb/node_modules/request/request.js:819:19)
at Object.onceWrapper (events.js:293:19)
at emitNone (events.js:86:13)
at ClientRequest.emit (events.js:188:7)
at Socket.emitTimeout (_http_client.js:679:10)
at Object.onceWrapper (events.js:293:19)
at emitNone (events.js:86:13)
at Socket.emit (events.js:188:7)
at Socket._onTimeout (net.js:345:8)
at ontimeout (timers.js:380:14) code: 'ESOCKETTIMEDOUT', connect: false }
Mi entorno es el nodo 7.7.2 / 8.3.0 y [email protected]
Sería bueno tener algunos comentarios sobre este problema de ESOCKETTIMEOUT, ya que yo también lo recibí y no encontré ninguna forma de resolver este problema sin cambiar este módulo.
¿ESOCKETTIMEOUT está relacionado con un problema con la agrupación de sockets? Pensé tan así que deshabilité la agrupación de sockets en el nodo con
`var http = require ('http');
http.globalAgent.maxSockets = Infinito;
var https = require ('https');
https.globalAgent.maxSockets = Infinito; `
pero no cambió nada acerca de no obtener ESOCKETTIMEOUT a alguien como una solución para este error?
el mismo problema para mi
Descubrí que si hay demasiadas solicitudes asíncronas, la excepción ESOCKETTIMEDOUT ocurre en Linux. La solución alternativa que encontré es hacer esto:
configurando estas opciones en request ():
agent: false, pool: {maxSockets: 100}
Tenga en cuenta que después de eso, el tiempo de espera puede estar mintiendo, por lo que es posible que deba aumentarlo.
Mismo problema aquí +1
agent: false, pool: {maxSockets: 100}
no ayudó
Creo que bestbuy.com puede estar bloqueando la solicitud debido a que los encabezados predeterminados se envían desde la solicitud. Si la solicitud se realiza con los mismos encabezados que envía la solicitud de axios, no se agota el tiempo de espera:
const request = require('request');
const axios = require('axios');
const url = 'http://www.bestbuy.com/';
request({
url: url,
timeout: 5000,
headers: {
"Accept": "application/json, text/plain, */*",
"User-Agent": "axios/0.18.0"
}
}, (error, response, body) => {
if (!error)
console.log(`request got ${response.statusCode}`);
else
console.error(`request got an error`, error);
});
axios.get(url).then((ret) => {
console.log(`Axios got ${ret.status}`);
});
Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Gracias por sus aportaciones.
Comentario más útil
Creo que bestbuy.com puede estar bloqueando la solicitud debido a que los encabezados predeterminados se envían desde la solicitud. Si la solicitud se realiza con los mismos encabezados que envía la solicitud de axios, no se agota el tiempo de espera: