Halo,
sangat mudah untuk mereproduksi dan selalu terjadi!
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}`);
});
keluaran:
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 }
Lingkungan saya adalah node 7.7.2/8.3.0 dan [email protected]
Akan menyenangkan untuk memiliki umpan balik tentang masalah ESOCKETTIMEOUT ini karena saya juga mendapatkannya dan saya tidak menemukan cara untuk menyelesaikan masalah ini tanpa mengubah modul ini.
Apakah ESOCKETTIMEOUT terkait dengan masalah dengan penyatuan soket? Saya pikir begitu, jadi saya menonaktifkan penyatuan soket di simpul dengan
`var http = membutuhkan('http');
http.globalAgent.maxSockets = Tak Terhingga;
var https = membutuhkan('https');
https.globalAgent.maxSockets = Tak terhingga;`
tetapi itu tidak mengubah apa pun tentang tidak mendapatkan ESOCKETTIMEOUT seseorang sebagai solusi untuk kesalahan ini?
masalah yang sama untuk saya
Saya menemukan jika ada terlalu banyak permintaan async, maka pengecualian ESOCKETTIMEDOUT terjadi di linux. Solusi yang saya temukan adalah melakukan ini:
menyetel opsi ini ke request():
agent: false, pool: {maxSockets: 100}
Perhatikan bahwa setelah itu, batas waktu dapat berbohong sehingga Anda mungkin perlu meningkatkannya.
Masalah yang sama di sini +1
agent: false, pool: {maxSockets: 100}
tidak membantu
Saya pikir bestbuy.com mungkin memblokir permintaan karena header default dikirim dari permintaan. Jika permintaan dibuat dengan tajuk yang sama dengan yang dikirim oleh permintaan aksios, waktu tidak akan habis:
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}`);
});
Masalah ini secara otomatis ditandai sebagai basi karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Terima kasih atas kontribusi Anda.
Komentar yang paling membantu
Saya pikir bestbuy.com mungkin memblokir permintaan karena header default dikirim dari permintaan. Jika permintaan dibuat dengan tajuk yang sama dengan yang dikirim oleh permintaan aksios, waktu tidak akan habis: