Undici מנתב בקשה דרך dispatcher. צרו ProxyAgent לפרוקסי HTTP הנבחר והעבירו אותו לקריאת fetch במקום לשנות את ה־dispatcher הגלובלי של התהליך כולו.

npm install [email protected]
import { fetch, ProxyAgent } from 'undici';

const dispatcher = new ProxyAgent('http://203.0.113.10:8080');

try {
  const response = await fetch('https://example.com/', {
    dispatcher,
    signal: AbortSignal.timeout(15000),
  });

  console.log(response.status);
  console.log(await response.text());
} finally {
  await dispatcher.close();
}

שמרו את התוכנית כקובץ .mjs או השתמשו בפרויקט מודולי ES. החליפו את IP התיעוד בפרוקסי HTTP מרשימת שרתי פרוקסי HTTP. הייבוא משתמש במכוון במימוש fetch של Undici, ולכן האפשרות dispatcher שייכת ללקוח שבדוגמה.

בדקו תאימות Node לפני שמאשימים את ה־IP

גרסאות Node הנתמכות ב־Undici תלויות בגרסת החבילה. הדוגמה משתמשת ב־Undici 8.12.3, הדורש Node 22.19.0 ומעלה. שגיאת טעינת מודול או גרסת מנוע מתרחשת לפני שהבקשה מגיעה לפרוקסי. בדקו את דרישת החבילה המותקנת במקום להניח שכל Node מריץ את Undici העדכני ביותר.

agent אחד יכול לשרת בקשות חוזרות

התוכנית הקצרה סוגרת את ה־dispatcher בסוף. אם יישום פעיל שולח כמה בקשות דרך אותה נקודה, שמרו את ה־agent למשימה וסגרו אותו כשהעבודה מסתיימת. יצירה וסגירה של agent לכל URL מונעות שימוש חוזר מועיל בחיבורים.

dispatcher גלובלי מתאים רק אם התכוונתם לשינוי הרחב יותר. העברה מפורשת מקלה לבדוק IP פרוקסי בלי לשנות בקשות יוצאות של רכיב אחר.

הסתכלו בתגובה ובשלב הכשל

fetch אינו מטפל בכל סטטוס שגיאה HTTP כ־Promise שנדחה. 403 או 429 עשויים להיות תגובה אמיתית של האתר שהפרוקסי העביר. שגיאת חיבור או מנהרה עשויה דווקא לדחות בקשה לפני קיום אובייקט תגובה. קראו את הסטטוס בנפרד מהשגיאות שהקריאה זורקת.

אם נדרש אימות, ProxyAgent של Undici מציע אפשרויות בבנאי. אל תוסיפו כותרת הרשאת פרוקסי לכותרות הבקשה לאתר; ה־agent מטפל במקטע חיבור אחר.

מאמרים קשורים