השתמשו ב-EnvHttpProxyAgent כשהסביבה של התהליך צריכה לבחור מסלול. השתמשו ב-Undici ProxyAgent מפורש כשנקודת הקצה שייכת להגדרת הלקוח. העבירו אותו לבקשה האמיתית; יצירת agent לבדה אינה משנה שום קריאת fetch.

import { EnvHttpProxyAgent, fetch } from 'undici';

const dispatcher = new EnvHttpProxyAgent();

try {
  const response = await fetch("https://example.com/", {
    dispatcher,
    signal: AbortSignal.timeout(15000),
  });
  console.log(response.status);
  await response.arrayBuffer();
} finally {
  await dispatcher.close();
}

שמרו זאת בשם proxy-check.mjs בסביבת מודולי ES שבה Undici זמין. ההפעלה הבאה ב-POSIX נותנת את שני מסלולי הפרוקסי ורשימת עקיפה ריקה:

http_proxy=http://203.0.113.10:8080 \
https_proxy=http://203.0.113.10:8080 \
no_proxy= \
node proxy-check.mjs

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

ב-Undici 8.12.3 הצורות הקטנות http_proxy, https_proxy ו-no_proxy קודמות לצורות הגדולות המקבילות כאשר שתיהן קיימות. יעדי HTTP ו-HTTPS בוחרים הגדרות משלהם. הגדרת HTTP בלבד מספקת גם חלופה ל-HTTPS; HTTPS בלבד אינו מספק HTTP. אל תניחו שמוסכמת ALL_PROXY של לקוח אחר חלה.

קלטמתי הגרסה הזאת משתמשת בו
סביבת פרוקסי HTTP/HTTPSנבחרת בעת בניית ה-agent. צרו dispatcher חדש אחרי שינוי נקודות הקצה האלה.
no_proxy מהסביבהנבדק שוב כשבקשות נשלחות.
noProxy בבנאימקבע במפורש מדיניות עקיפה במקום לעקוב אחרי שינויי סביבה מאוחרים.

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

ב-Windows התהליך הראשי אינו מבחין בין אותיות גדולות לקטנות בשמות הסביבה, ולכן HTTP_PROXY ו-http_proxy אינם ערכים עצמאיים. עותקי הסביבה של Node Worker מבחינים בגודל אותיות כפי שמתועד. הביאו זאת בחשבון לפני קביעת שתי הצורות כדי לבדוק עדיפות. הדוגמה סוגרת את ה-dispatcher אחרי העבודה; השאירו אותו כל עוד בקשות חוזרות צריכות אותה מדיניות נקודות קצה שנקלטה.

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