Request: اطلب الحصول على ESOCKETTIMEDOUT باستمرار عندما يعمل جميع العملاء الآخرين (http://www.bestbuy.com)

تم إنشاؤها على ١٠ أغسطس ٢٠١٧  ·  6تعليقات  ·  مصدر: request/request

مرحبا،

من السهل جدًا التكاثر ويحدث دائمًا!

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

النواتج:

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 }

بيئتي هي العقدة 7.7.2 / 8.3.0 و [email protected]

stale

التعليق الأكثر فائدة

أعتقد أن موقع bestbuy.com قد يحظر الطلب بسبب إرسال الرؤوس الافتراضية من الطلب. إذا تم تقديم الطلب بنفس الرؤوس التي يرسلها طلب axios ، فلن تنتهي المهلة:

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

ال 6 كومينتر

سيكون من الجيد الحصول على بعض التعليقات حول مشكلة ESOCKETTIMEOUT هذه نظرًا لأنني حصلت عليها أيضًا ولم أجد أي طريقة لحل هذه المشكلة دون تغيير هذه الوحدة.

هل يرتبط ESOCKETTIMEOUT بمشكلة تتعلق بتجميع المقبس؟ اعتقدت ذلك لذا قمت بتعطيل تجميع المقبس في العقدة بـ

"var http = يتطلب ('http') ؛
http.globalAgent.maxSockets = إنفينيتي ،

var https = يتطلب ('https') ؛
https.globalAgent.maxSockets = إنفينيتي ؛ `

لكنها لم تغير أي شيء حول عدم الحصول على ESOCKETTIMEOUT شخص ما كحل لهذا الخطأ؟

نفس المشكلة بالنسبة لي

لقد اكتشفت أنه إذا كان هناك عدد كبير جدًا من الطلبات غير المتزامنة ، فإن استثناء ESOCKETTIMEDOUT يحدث في نظام التشغيل Linux. الحل الذي وجدته هو القيام بذلك:

تعيين هذه الخيارات لطلب ():

agent: false, pool: {maxSockets: 100}

لاحظ أنه بعد ذلك ، قد تكون المهلة كاذبة لذا قد تحتاج إلى زيادتها.

نفس المشكلة هنا +1
agent: false, pool: {maxSockets: 100} لم يساعد

أعتقد أن موقع bestbuy.com قد يحظر الطلب بسبب إرسال الرؤوس الافتراضية من الطلب. إذا تم تقديم الطلب بنفس الرؤوس التي يرسلها طلب axios ، فلن تنتهي المهلة:

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

تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. شكرا لمساهماتكم.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات