Olá,
muito fácil de reproduzir e sempre acontece!
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}`);
});
saídas:
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 }
Meu ambiente é o nó 7.7.2 / 8.3.0 e [email protected]
Seria bom ter algum feedback sobre este problema ESOCKETTIMEOUT, já que eu também o recebi e não encontrei nenhuma maneira de resolver esse problema sem alterar este módulo.
O ESOCKETTIMEOUT está relacionado a um problema com o pool de soquetes? Eu pensei então, então eu desativei o pooling de soquetes no nó com
`var http = require ('http');
http.globalAgent.maxSockets = Infinity;
var https = requer ('https');
https.globalAgent.maxSockets = Infinity; `
mas não mudou nada sobre não conseguir o ESOCKETTIMEOUT de alguem como solução para esse erro?
mesmo problema para mim
Descobri que se houver muitas solicitações assíncronas, a exceção ESOCKETTIMEDOUT acontece no linux. A solução alternativa que encontrei é fazer o seguinte:
configurando essas opções para request ():
agent: false, pool: {maxSockets: 100}
Observe que, depois disso, o tempo limite pode diminuir, portanto, talvez seja necessário aumentá-lo.
Mesmo problema aqui +1
agent: false, pool: {maxSockets: 100}
não ajudou
Acho que bestbuy.com pode estar bloqueando a solicitação devido aos cabeçalhos padrão enviados da solicitação. Se a solicitação for feita com os mesmos cabeçalhos que a solicitação axios está enviando, ele não atinge o tempo limite:
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 foi marcado automaticamente como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Obrigado por suas contribuições.
Comentários muito úteis
Acho que bestbuy.com pode estar bloqueando a solicitação devido aos cabeçalhos padrão enviados da solicitação. Se a solicitação for feita com os mesmos cabeçalhos que a solicitação axios está enviando, ele não atinge o tempo limite: