Request: Minta untuk mendapatkan ESOCKETTIMEDOUT secara konsisten saat semua klien lain bekerja (http://www.bestbuy.com)

Dibuat pada 10 Agu 2017  ·  6Komentar  ·  Sumber: request/request

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]

stale

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:

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}`);
});

Semua 6 komentar

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat