Request: Fordern Sie an, ESOCKETTIMEDOUT durchgängig zu erhalten, wenn alle anderen Clients arbeiten (http://www.bestbuy.com)

Erstellt am 10. Aug. 2017  ·  6Kommentare  ·  Quelle: request/request

Hallo,

sehr einfach zu reproduzieren und passiert immer!

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

Ausgänge:

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 }

Meine Umgebung ist Knoten 7.7.2/8.3.0 und [email protected]

stale

Hilfreichster Kommentar

Ich denke, bestbuy.com blockiert möglicherweise die Anfrage, da die Standardheader von der Anfrage gesendet werden. Wenn die Anfrage mit denselben Headern gestellt wird, die die Axios-Anfrage sendet, tritt keine Zeitüberschreitung auf:

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

Alle 6 Kommentare

Es wäre schön, ein Feedback zu diesem ESOCKETTIMEOUT-Problem zu erhalten, da ich es auch erhalten habe und keine Möglichkeit gefunden habe, dieses Problem zu lösen, ohne dieses Modul zu ändern.

Hängt ESOCKETTIMEOUT mit einem Problem mit dem Socket-Pooling zusammen? Ich dachte soo, also habe ich das Socket-Pooling im Knoten deaktiviert mit

`var http = require('http');
http.globalAgent.maxSockets = Unendlich;

var https = erfordern('https');
https.globalAgent.maxSockets = Infinity;`

aber es hat nichts daran geändert, dass jemand das ESOCKETTIMEOUT nicht als Lösung für diesen Fehler bekommt?

gleiches Problem bei mir

Ich habe festgestellt, dass bei zu vielen asynchronen Anforderungen die ESOCKETTIMEDOUT-Ausnahme unter Linux auftritt. Die Problemumgehung, die ich gefunden habe, ist dies:

Setzen Sie diese Optionen auf request():

agent: false, pool: {maxSockets: 100}

Beachten Sie, dass die Zeitüberschreitung danach liegen kann, sodass Sie sie möglicherweise erhöhen müssen.

Gleiches Problem hier +1
agent: false, pool: {maxSockets: 100} hat nicht geholfen

Ich denke, bestbuy.com blockiert möglicherweise die Anfrage, da die Standardheader von der Anfrage gesendet werden. Wenn die Anfrage mit denselben Headern gestellt wird, die die Axios-Anfrage sendet, tritt keine Zeitüberschreitung auf:

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

Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität hatte. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen