استفاده از IP پراکسی با Undici در Node
ProxyAgent را به یک درخواست fetch بدهید و مجموعهٔ اتصال آن را از ترافیک نامرتبط Node جدا نگه دارید.
Undici درخواست را از یک dispatcher عبور میدهد. برای پراکسی HTTP انتخابی ProxyAgent بسازید و آن را به فراخوانی 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 متعلق به کلاینت همین مثال است.
پیش از مقصر دانستن IP سازگاری Node را بررسی کنید
نسخههای 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 مسئول بخش دیگری از اتصال است.