ProxynetProxynet

وب اسکرپینگ با n8n: تنظیم HTTP Request و پروکسی

تاریخ انتشار:

20 دقیقه مطالعه

Acar Diveroli
نویسنده: Acar Diveroli
زمینه سیاه با سطرهای محو IP؛ در قابی گوشه‌به‌علاوه: چپ Proxynet، راست ⁨n8n⁩، ضربدری میانشان و برچسب INTEGRATION
فهرست مطالب

گردش کاری که در n8n ساخته‌اید هر صبح ده صفحه محصول را باز می‌کند و قیمت‌ها را در یک جدول می‌نویسد. هفته اول مشکلی پیش نمی‌آید. بعد فهرست به دویست محصول می‌رسد، گردش کار از تنها آدرس IP سرور شما پشت‌سرهم درخواست می‌فرستد و نود HTTP Request قرمز می‌شود: اول 429 و بعد 403. یا وضعیت برعکس است: API مقصد قیمت درست را فقط به درخواست‌هایی نشان می‌دهد که از یک کشور مشخص می‌آیند، ولی سرور n8n شما در کشور دیگری است. در هر دو حالت تنظیم موردنیاز یکی است: عبور دادن درخواست‌های خروجی n8n از یک پروکسی.

در این نوشته دو جایی را که پروکسی در n8n تعریف می‌شود توضیح می‌دهیم: گزینه Proxy در نود HTTP Request و متغیرهای محیطی در نصب self-hosted. به‌ترتیب بررسی می‌کنیم اطلاعات ورود چگونه در آدرس نوشته می‌شود، کدام تنظیم بر دیگری مقدم است، n8n Cloud با سرور خودتان چه تفاوتی دارد و خطاهای رایج کدام‌اند. موضوع پروکسی معکوس (reverse proxy) را هم جدا می‌کنیم، چون بخشی از کسانی که «n8n proxy» را جست‌وجو می‌کنند در واقع دنبال آن هستند. گردش کار نمونه، قیمت را در سایتی رصد می‌کند که برای تمرین منتشر شده است.

n8n چیست و در اسکرپینگ چه جایگاهی دارد؟

n8n یک ابزار خودکارسازی است که در آن با وصل کردن جعبه‌ها (نود، به انگلیسی node) با خط، گردش کار می‌سازید. یک نود آغازگر گردش کار را شروع می‌کند (زمان‌بند، webhook، فرم) و نودهای بعدی داده را می‌گیرند، تبدیل می‌کنند و جایی می‌نویسند. می‌توانید ابزار را روی ابر خود n8n به کار ببرید (n8n Cloud) یا روی سرور خودتان نصب کنید (self-hosted). این تفاوت در موضوع پروکسی تعیین‌کننده است.

در اسکرپینگ دو نود کار اصلی را انجام می‌دهند. نود HTTP Request به یک آدرس درخواست می‌فرستد و پاسخ را می‌گیرد؛ نود HTML با انتخابگرهای CSS فیلدهای موردنظر شما را از درون پاسخ بیرون می‌کشد. این دو نود در صفحه‌هایی که محتوایشان آماده از سرور می‌آید و در APIهایی که JSON برمی‌گردانند خوب کار می‌کنند. در صفحه‌هایی که محتوا در مرورگر با JavaScript ساخته می‌شود، HTTP Request فقط یک اسکلت خالی می‌بیند؛ این تفاوت را در نوشته صفحه‌های ایستا و پویا توضیح داده‌ایم. برای نوشتن انتخابگر، نوشته انتخابگر CSS یا XPath را ببینید.

قوت n8n در کاری است که بعد از گرفتن داده انجام می‌شود: نوشتن در جدول، مقایسه با مقدار قبلی و فرستادن اعلان هنگام تغییر. برای خزش چند هزار صفحه ابزار مناسبی نیست؛ در آن مقیاس چارچوبی مانند Scrapy یا یک زیرساخت استخراج داده لازم است. اینکه کدام روش چه زمانی کافی است را در نوشته استخراج داده از وب‌سایت مقایسه کرده‌ایم.

«n8n proxy» دو موضوع جداست: دنبال کدام هستید؟

در پیشنهادهای جست‌وجو کنار عبارت «n8n proxy» واژه‌های proxy hops، nginx و reverse هم می‌آیند. این‌ها به تنظیمی که موضوع این نوشته است ربطی ندارند:

پروکسی مستقیم (forward proxy)پروکسی معکوس (reverse proxy)
جهت ترافیکدرخواست‌هایی که از n8n بیرون می‌رونددرخواست‌هایی که از بیرون به n8n می‌رسند
چه کاری می‌کندآدرس IP و کشوری را که درخواست از آن خارج می‌شود تعیین می‌کندn8n را با نام دامنه و HTTPS در دسترس قرار می‌دهد
ابزار معمولنقطه اتصال ارائه‌دهنده پروکسیnginx، Caddy، Traefik
تنظیم در n8nHTTP Request → Proxy، HTTP_PROXY، HTTPS_PROXYN8N_PROXY_HOPS، متغیر آدرس webhook
نشانه407، ECONNREFUSED، 403 / 429 از سایت مقصدنمایش آدرس webhook به شکل localhost، IP نادرست کاربر

اگر n8n را پشت nginx اجرا می‌کنید، صفحه‌ای از مستندات n8n که پیکربندی آدرس webhook پشت پروکسی معکوس را توضیح می‌دهد دو چیز می‌خواهد: مقدار N8N_PROXY_HOPS را 1 بگذارید (پیش‌فرض آن 0 است و می‌گوید چند پروکسی معکوس جلوی n8n قرار دارد) و آخرین پروکسی زنجیره سرآیندهای X-Forwarded-For، X-Forwarded-Host و X-Forwarded-Proto را عبور دهد. این تنظیم‌ها هیچ اثری روی درخواست‌های خروجی شما ندارند. تفاوت این دو مفهوم و نمونه nginx را در نوشته فوروارد پروکسی و ریورس پروکسی می‌یابید. ادامه این نوشته درباره پروکسی مستقیم است.

پروکسی در نود HTTP Request چگونه تعریف می‌شود؟

این تنظیم در میان فیلدهای اصلی نود نیست و در بخش Options در پایین‌ترین قسمت قرار دارد؛ به همین دلیل در نگاه اول دیده نمی‌شود.

  1. در گردش کار خود نود HTTP Request را باز کنید و فیلدهای Method و URL را پر کنید.
  2. در بخش Options در پایین پارامترها روی Add option بزنید.
  3. از فهرست، گزینه Proxy را اضافه کنید.
  4. در فیلدی که باز می‌شود آدرس پروکسی را همراه با طرح (scheme) بنویسید: http://user:pass@pr.proxynet.io:8000
  5. نود را با Execute step به‌تنها اجرا کنید و خروجی را بررسی کنید.

متن راهنمای این فیلد e.g. http://myproxy:3128 است؛ یعنی n8n در اینجا یک URL کامل می‌خواهد. در نسخه فعلی که برای این نوشته به‌صورت محلی نصب کردیم، آدرس بدون طرح (user:pass@pr.proxynet.io:8000) خطایی نداد و درخواست بدون گذر از پروکسی مستقیم خارج شد. با آدرسی که با socks5:// شروع می‌شد هم نتیجه همین بود: این فیلد برای پروکسی HTTP است. مستندات نود HTTP Request به‌روشنی می‌گوید این گزینه بر تنظیم سراسری انجام‌شده با HTTP_PROXY، HTTPS_PROXY و ALL_PROXY مقدم است. پس حتی وقتی روی سرور شما یک پروکسی سازمانی تعریف شده است، می‌توانید یک نود را از نقطه اتصال دیگری بیرون بفرستید.

نام کاربری و رمز عبور کجا نوشته می‌شود؟

نود برای پروکسی فیلد جداگانه نام کاربری یا رمز عبور ندارد. اطلاعات ورود درون آدرس و به شکل username:password@ نوشته می‌شود. بخش Authentication نود به سایت مقصد می‌رود و نه به پروکسی؛ نوشتن رمز پروکسی در آنجا خطای 407 را برطرف نمی‌کند.

اگر رمز شما نویسه‌هایی مانند @، :، / یا # دارد، آدرس از جای نادرست بریده می‌شود. این نویسه‌ها را با کدگذاری درصدی بنویسید: %40 به‌جای @ و %3A به‌جای :. در آزمون محلی ما رمز pa@ss:1 وقتی به شکل pa%40ss%3A1 نوشته شد در پروکسی درست خوانده شد. جزئیات دو روش احراز هویت در نوشته احراز هویت پروکسی: نام کاربری و رمز یا لیست سفید IP آمده است.

یک نکته امنیتی: فیلد Proxy متن ساده است و وارد مخزن رمزنگاری‌شده اطلاعات ورود n8n (بخش Credentials) نمی‌شود. وقتی گردش کار را به‌صورت JSON خروجی می‌گیرید و به اشتراک می‌گذارید، رمز پروکسی هم درون فایل می‌رود؛ پیش از اشتراک‌گذاری فیلد را پاک کنید.

آیا لیست سفید IP در n8n قابل استفاده است؟

برای n8n روی سرور خودتان که آدرس IP ثابت دارد، بله: IP سرور را به لیست سفید در پنل پروکسی اضافه می‌کنید و آدرس بدون رمز به شکل http://pr.proxynet.io:8000 نوشته می‌شود. در n8n Cloud این روش قابل‌اعتماد نیست. n8n در صفحه آدرس‌های IP سرویس Cloud در مستندات خود می‌گوید IPهای خروجی ثابت نیستند و ممکن است بدون اطلاع قبلی تغییر کنند. آدرسی که امروز به لیست سفید اضافه می‌کنید ممکن است فردا نامعتبر شود. در Cloud با نام کاربری و رمز عبور وصل شوید.

در نصب self-hosted متغیرهای محیطی چگونه به کار می‌روند؟

به‌جای نوشتن پروکسی در تک‌تک نودها می‌توانید برای کل فرایند n8n یک پروکسی تعریف کنید. صفحه متغیرهای محیطی استقرار در مستندات n8n چهار متغیر را برمی‌شمارد:

متغیرکارکرد
HTTP_PROXYترافیک HTTP رمزنگاری‌نشده نودها از این آدرس می‌گذرد
HTTPS_PROXYترافیک دارای TLS (یعنی HTTPS) نودها از این آدرس می‌گذرد
ALL_PROXYاگر دو متغیر اختصاصی‌تر تعریف نشده باشند برای هر دو به کار می‌رود
NO_PROXYفهرست میزبان‌هایی که با ویرگول جدا شده‌اند و بدون پروکسی مستقیم به آن‌ها وصل می‌شود

در نصبی که با Docker Compose اجرا می‌شود، متغیرها به بخش environment سرویس اضافه می‌شوند:

yaml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    environment:
      - HTTP_PROXY=http://user:pass@pr.proxynet.io:8000
      - HTTPS_PROXY=http://user:pass@pr.proxynet.io:8000
      - NO_PROXY=localhost,127.0.0.1,postgres,redis

اینکه مقدار HTTPS_PROXY با http:// شروع می‌شود اشتباه تایپی نیست: نام متغیر طرح پروکسی را نمی‌گوید و فقط مشخص می‌کند کدام ترافیک به آنجا برود. شیوه تعریف این متغیرها در سیستم‌عامل را در نوشته استفاده از پروکسی در wget توضیح داده‌ایم؛ در اینجا فقط به سه دام ویژه n8n می‌پردازیم.

متغیر با حروف کوچک بر متغیر با حروف بزرگ مقدم است. همان صفحه مستندات می‌گوید در بسته proxy-from-env که n8n به کار می‌برد، نام‌های با حروف کوچک مانند http_proxy وقتی هر دو تعریف شده باشند بر نام‌های با حروف بزرگ مقدم‌اند. اگر فرد دیگری یک متغیر با حروف کوچک در ایمیج Docker یا سرور شما گذاشته باشد، مقدار HTTP_PROXY شما بی‌صدا نادیده گرفته می‌شود. درون کانتینر با env | grep -i proxy هر دو را بررسی کنید.

فهرست NO_PROXY را خالی نگذارید. اگر n8n با پایگاه داده همان شبکه، با Redis یا با یک API داخلی هم از طریق HTTP ارتباط دارد، این درخواست‌ها هم به پروکسی می‌روند و به احتمال زیاد همان‌جا گیر می‌کنند. نام میزبان‌های داخلی و localhost را به فهرست اضافه کنید.

همه نودها از این متغیرها پیروی نمی‌کنند. نودهایی که از ابزار کمکی HTTP خود n8n استفاده می‌کنند این تنظیم را می‌بینند. درباره برخی نودها که کتابخانه کلاینت خودشان را می‌آورند گزارش‌هایی ثبت شده است که نشان می‌دهد متغیر در نظر گرفته نمی‌شود (برای نمونه گزارش شماره 19652 در مخزن n8n در سال 2025 برای نود RSS Read باز شد و بعدتر بسته شد). پیش از اینکه یک نود حساس را وارد کار واقعی کنید، آن را با گام راستی‌آزمایی پایین‌تر بیازمایید.

متغیرها هنگام شروع فرایند n8n خوانده می‌شوند؛ پس از تغییر باید کانتینر یا سرویس را دوباره راه‌اندازی کنید.

n8n Cloud و self-hosted: کدام راه در کجا باز است؟

n8n CloudSelf-hosted (Docker، npm)
گزینه HTTP Request → Proxyوجود داردوجود دارد
HTTP_PROXY / HTTPS_PROXYقابل تعریف نیست، چون محیط سرور در اختیار شما نیستتعریف می‌شود و روی کل فرایند اثر دارد
پروکسی با لیست سفید IPتوصیه نمی‌شود: IPهای خروجی بدون اطلاع قبلی تغییر می‌کنندروی سروری با IP ثابت کار می‌کند
IP خروجی بدون پروکسیآدرس‌های متغیر در زیرساخت ابری n8nآدرس خود سرور شما

اگر از Cloud استفاده می‌کنید تنها راه شما گزینه نود است. در نصب self-hosted هر دو راه باز است؛ می‌توانید متغیر محیطی را «خروجی پیش‌فرض» و گزینه نود را «این درخواست از جای دیگری خارج شود» در نظر بگیرید.

گردش کار نمونه: رصد قیمت یک محصول

نمونه را روی books.toscrape.com می‌سازیم که برای تمرین اسکرپینگ منتشر شده است. در کار خودتان اول ببینید سایت مقصد API رسمی یا پنل فروشنده دارد یا نه؛ اگر دارد، به‌جای تجزیه HTML از همان استفاده کنید. اگر ندارد، فایل robots.txt سایت و شرایط استفاده آن را بخوانید. شیوه خواندن قواعد robots.txt در نوشته فایل robots.txt چیست آمده است.

گردش کار از شش نود تشکیل می‌شود:

  1. Schedule Trigger: گردش کار را روزی یک بار شروع می‌کند. در رصد قیمت به‌ندرت به بررسی دقیقه‌ای نیاز است.
  2. فهرست محصولات: آدرس‌ها را از یک جدول Google Sheets یا از نود Edit Fields بگیرید. هر سطر یک فیلد url دارد.
  3. Loop Over Items: فهرست را یکی‌یکی پردازش می‌کند. مقدار Batch Size را 1 بگذارید.
  4. HTTP Request: در فیلد URL عبارت {{ $json.url }} را بنویسید، زیر Options گزینه Proxy را تعریف کنید و در گزینه Response قالب را متن بگذارید.
  5. HTML: عملیات Extract HTML Content را انتخاب کنید و فیلدهای موردنظر را با انتخابگرهای CSS تعریف کنید.
  6. Wait: چند ثانیه صبر می‌کند و به ابتدای حلقه برمی‌گردد.

وقتی حلقه تمام شد، داده را در یک جدول می‌نویسید، در یک نود If با قیمت روز قبل مقایسه می‌کنید و اگر تفاوتی بود اعلان می‌فرستید.

نود HTTP Request در JSON خروجی گردش کار به این شکل است:

json
{
  "parameters": {
    "url": "={{ $json.url }}",
    "options": {
      "proxy": "http://user:pass@pr.proxynet.io:8000",
      "timeout": 20000,
      "response": {
        "response": { "fullResponse": true, "responseFormat": "text" }
      }
    }
  },
  "name": "HTTP Request",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 4.2
}

در نود HTML برای این سایت سه سطر کافی است:

KeyCSS SelectorReturn Value
titleh1Text
pricep.price_colorText
stockp.availabilityText

زیر Options گزینه‌های Trim Values و Clean Up Text را روشن کنید؛ به این ترتیب شکست خط‌ها و فاصله‌های اضافی سطر موجودی پاک می‌شوند. خروجی متنی مانند £51.77 است؛ برای تبدیل آن به عدد باید در نود بعدی نماد پول را بردارید و جداکننده اعشار را اصلاح کنید.

ساختار کامل‌تر با تطبیق محصول، تاریخچه قیمت و هشدار آستانه را در نوشته رصد قیمت رقبا در فروشگاه اینترنتی و بخش محصولی کار را در صفحه رصد قیمت توضیح داده‌ایم.

محدودیت نرخ و تلاش دوباره در n8n چگونه راه‌اندازی می‌شود؟

وقتی n8n یک فهرست می‌گیرد، اگر خلاف آن را نگویید، درخواست همه موارد را پشت‌سرهم و بدون مکث می‌فرستد. استفاده از پروکسی این رفتار را ملایم نمی‌کند؛ فقط آدرسی را که درخواست‌ها از آن خارج می‌شوند عوض می‌کند. باری را که سایت مقصد می‌بیند باید خودتان محدود کنید. صفحه «Handle rate limits» در مستندات n8n سه راه داخلی نشان می‌دهد:

  • Batching (در HTTP Request → Options): با Items per Batch تعیین می‌کنید هر بار چند درخواست برود و با Batch Interval (ms) مکث میان دسته‌ها را مشخص می‌کنید. کوتاه‌ترین راه است و به کد نیاز ندارد.
  • Loop Over Items + Wait: همان ساختاری که در نمونه بالا به کار بردیم. مکث پس از هر درخواست را آشکارا می‌بینید و می‌توانید نودهای دیگری در میان بگذارید.
  • Retry On Fail (در زبانه Settings نود): درخواست ناموفق را دوباره امتحان می‌کند؛ با Wait Between Tries (ms) فاصله میان تلاش‌ها را می‌دهید.

روشن کردن Retry On Fail برای هر خطایی درست نیست. 429 و 503 با صبر کردن برطرف می‌شوند؛ 403 و 407 برطرف نمی‌شوند و پنج بار فرستادن همان درخواست فقط ترافیک بی‌فایده می‌سازد. اینکه با کدام کد دوباره تلاش شود و با کدام توقف شود را در جدول نوشته کدهای وضعیت HTTP در وب اسکرپینگ گرد آورده‌ایم؛ منطق محدودیت نرخ هم در نوشته ⁦429 Too Many Requests⁩ آمده است. اگر می‌خواهید بر اساس کد وضعیت شاخه بزنید، در گزینه Response نود HTTP Request دو گزینه Include Response Headers and Status و Never Error را روشن کنید و سپس در یک نود If فیلد statusCode را بررسی کنید.

آیا برای چرخش IP نود جداگانه یا کد لازم است؟

برخی الگوهای اسکرپینگ n8n تکه‌های JavaScript دارند که در نود Code فهرستی از پروکسی‌ها نگه می‌دارند و در هر درخواست مورد بعدی را انتخاب می‌کنند. اگر فهرستی از آدرس‌های IP تکی در دست دارید، این کار لازم است. با یک نقطه اتصال چرخشی لازم نیست: به یک آدرس واحد مانند pr.proxynet.io:8000 وصل می‌شوید و ارائه‌دهنده در هر اتصال تازه IP خروجی را عوض می‌کند. در سمت n8n آدرسی که در فیلد Proxy نوشته‌اید هیچ‌وقت تغییر نمی‌کند. جزئیات سازوکار در نوشته چرخش IP چیست و چگونه کار می‌کند؟ و بخش محصولی آن در صفحه پروکسی چرخشی آمده است.

در مقابل، کارهایی هم هست که IP در آن‌ها هرگز نباید عوض شود. اگر API یک همکار تجاری فقط درخواست آدرس‌های ثبت‌شده در لیست سفید را می‌پذیرد و شما از n8n Cloud استفاده می‌کنید، خارج شدن از یک آدرس ثابت مانند پروکسی ISP به‌جای IPهای متغیر Cloud مشکل را حل می‌کند. این سناریو را در نوشته IP ثابت برای دسترسی به API بررسی کرده‌ایم.

پروکسی در نود AI Agent چگونه به کار می‌رود؟

می‌توانید HTTP Request را به‌عنوان ابزار (tool) به نود AI Agent در n8n وصل کنید؛ مدل هر وقت لازم باشد این ابزار را فرامی‌خواند و یک صفحه یا API را می‌خواند. نود HTTP Request که به‌عنوان ابزار وصل شده همان بخش Options را دارد، پس گزینه Proxy در اینجا هم به همان شکل کار می‌کند. مستندات برای این کاربرد یک گزینه دیگر هم اضافه می‌کند: Optimize Response پیش از دادن پاسخ به مدل، فیلدهای JSON را پالایش می‌کند یا از HTML فقط متن را بیرون می‌کشد و شمار توکن‌های مصرفی را پایین می‌آورد.

در ساختار عامل به دو نکته توجه کنید. آدرس‌هایی را که عامل می‌تواند به آن‌ها برود در تعریف ابزار محدود کنید: به‌جای اینکه URL را کاملاً به مدل بسپارید، یک دامنه ثابت و یک پارامتر مسیر تعریف کنید که مدل پر کند. درخواست‌هایی که به ارائه‌دهنده مدل زبانی می‌روند از HTTP Request نمی‌گذرند؛ برای قرار دادن آن‌ها پشت پروکسی در نصب self-hosted به متغیرهای محیطی نیاز است و باید جداگانه بیازمایید که نود مدل از متغیر پیروی می‌کند. شیوه دسترسی عامل‌ها به وب را در نوشته‌های عامل‌های هوش مصنوعی چگونه کار می‌کنند؟ و دسترسی امن LLM به وب توضیح داده‌ایم. برای صفحه‌هایی که مرورگر واقعی می‌خواهند نوشته Playwright MCP را ببینید.

چگونه مطمئن شویم پروکسی کار می‌کند؟

چون آدرسی که نادرست نوشته شده ممکن است بدون خطا نادیده گرفته شود، تنظیم را حتماً بیازمایید:

  1. در یک گردش کار خالی دو نود HTTP Request بگذارید. آدرس هر دو سرویسی باشد که IP مبدأ درخواست را برمی‌گرداند (برای نمونه https://api.ipify.org?format=json).
  2. در نود اول گزینه Proxy را خالی بگذارید و در نود دوم آن را پر کنید.
  3. هر دو را اجرا کنید. نود اول باید IP سرور n8n شما (یا Cloud) را نشان دهد و نود دوم IP خروجی پروکسی را. اگر دو آدرس یکی باشند، پروکسی فعال نیست.
  4. اگر از متغیر محیطی استفاده می‌کنید، همین آزمون را با نودی انجام دهید که فیلد Proxy آن خالی است: اگر IP عوض شده باشد، متغیر خوانده می‌شود.

جزئیات گام‌ها در نوشته چگونه پروکسی را آزمایش کنیم آمده است.

خطاهای رایج و معنای آن‌ها

خطااز کجا می‌آیدعلت احتمالیچه باید کرد
ECONNREFUSEDسرور n8nپورت پروکسی نادرست است یا دیوار آتش خروجی را بسته استآدرس را دوباره از پنل کپی کنید و اجازه خروج به آن پورت را بررسی کنید
407 Proxy Authentication Requiredپروکسیرمز نادرست است، نویسه ویژه کدگذاری نشده یا IP در لیست سفید نیستاطلاعات ورود را درون آدرس و با کدگذاری درصدی بنویسید
400 Bad Request (فقط در مقصدهای HTTPS)پروکسیکلاینت به‌جای باز کردن تونل، درخواست را مستقیم به پروکسی می‌فرستدn8n را به‌روز کنید؛ توضیح پایین را ببینید
ETIMEDOUT / ECONNRESETشبکهپروکسی در دسترس نیست یا مقصد بسیار کند استمقدار Options → Timeout را بالا ببرید و موقعیت خروجی نزدیک‌تری انتخاب کنید
ENOTFOUNDDNSنام میزبان پروکسی نادرست نوشته شده استنام را از پنل کپی کنید و دوباره بنویسید
403 / 429 از مقصدسایت مقصدپروکسی کار می‌کند؛ مشکل از سرعت یا نوع IP استبا Batching و Wait سرعت را کم کنید و علت را تشخیص دهید

سطر 400 پیشینه‌ای ویژه n8n دارد. نود HTTP Request در پس‌زمینه از کتابخانه Axios استفاده می‌کند و پشتیبانی داخلی Axios از پروکسی به این شناخته می‌شود که در مقصدهای HTTPS به‌جای باز کردن تونل CONNECT درخواست را مستقیم به پروکسی می‌فرستد. گزارش شماره 9169 در مخزن n8n ثبت کرده است که این رفتار در نود به خطای 400 می‌انجامید. این گزارش مربوط به سال 2024 است. در نسخه فعلی که آزمودیم، نود برای مقصد HTTPS در پروکسی تونل CONNECT باز کرد و صفحه را بدون مشکل گرفت. اگر در نسخه‌ای قدیمی از n8n آدرس‌های HTTP از پروکسی می‌گذرند ولی آدرس‌های HTTPS خطای 400 می‌دهند، گام اول به‌روزرسانی است.

اگر در مرورگر هشدار پاسخ ندادن سرور پروکسی را می‌بینید، مشکل به n8n ربطی ندارد؛ نوشته سرور پروکسی پاسخ نمی‌دهد را ببینید.

موارد کاربرد

  • رصد قیمت و موجودی: گردش کارهایی که روزی یک بار اجرا می‌شوند و هنگام تغییر اعلان می‌فرستند. ساختار همان نمونه بالاست؛ بخش محصولی آن در صفحه رصد قیمت آمده است.
  • بررسی محتوایی که بر اساس موقعیت تغییر می‌کند: اجرای همان نود با پروکسی‌هایی که از کشورهای مختلف خارج می‌شوند تا ببینید همان صفحه از هر کشور چگونه دیده می‌شود. برای پوشش گسترده کشورها پروکسی مسکونی به کار می‌رود.
  • گردآوری محتوا در مقیاس کوچک: تیتر خبرها، شمار آگهی‌ها و کاتالوگ‌های عمومی. وقتی مقیاس بزرگ شد، رفتن به سراغ راهکار خزنده وب درست‌تر است.

اشتباه‌های رایج

  • نوشتن رمز پروکسی در بخش Authentication. آن بخش به سایت مقصد می‌رود. اطلاعات ورود پروکسی درون آدرس است.
  • ننوشتن طرح. به‌جای pr.proxynet.io:8000 بنویسید http://pr.proxynet.io:8000؛ آدرس بدون طرح ممکن است بدون خطا نادیده گرفته شود.
  • فراموش کردن محدودیت نرخ پس از افزودن پروکسی. فهرستی با صد مورد، اگر Batching یا Wait نباشد، صد درخواست را هم‌زمان می‌فرستد.
  • خودکارسازی صفحه‌هایی که ورود می‌خواهند یا داده شخصی دارند. پروکسی گردش کاری را که شرایط پلتفرم یا قوانین حفاظت از داده را زیر پا می‌گذارد مشروع نمی‌کند؛ چارچوب حقوقی را در نوشته آیا اسکرپینگ وب قانونی است؟ خلاصه کرده‌ایم.

راهنمای انتخاب

نیازپیشنهاد
از n8n Cloud استفاده می‌کنم و می‌خواهم فقط یک نود از پروکسی خارج شودHTTP Request → Options → Proxy با نام کاربری و رمز عبور
در n8n self-hosted همه نودها از پروکسی خارج شوندHTTP_PROXY، HTTPS_PROXY، NO_PROXY و سپس راستی‌آزمایی نود به نود
تنظیم سراسری هست ولی یک نود باید از کشور دیگری خارج شودگزینه Proxy در همان نود؛ بر تنظیم سراسری مقدم است
در هر درخواست یک IP متفاوتنقطه اتصال چرخشی؛ چرخش را در نود Code ننویسید
طرف مقابل IP من را در لیست سفید می‌گذاردپروکسی با IP ثابت (ISP) یا سرور خودتان با IP ثابت
صفحه با JavaScript بارگذاری می‌شود و نود HTML خالی برمی‌گرددHTTP Request کافی نیست؛ خودکارسازی مرورگر یا نقطه اتصال JSON پشت صحنه سایت

پرسش‌های متداول

آیا در n8n Cloud می‌توان از پروکسی استفاده کرد؟

بله، گزینه Proxy در نود HTTP Request در Cloud هم وجود دارد؛ ولی متغیرهای محیطی قابل استفاده نیستند. چون IPهای خروجی Cloud ثابت نیستند، با نام کاربری و رمز عبور به پروکسی وصل شوید و نه با لیست سفید IP.

N8N_PROXY_HOPS چه کاری می‌کند؟

می‌گوید چند پروکسی معکوس (nginx، Caddy، متعادل‌کننده بار ابری) جلوی n8n قرار دارد؛ مقدار پیش‌فرض آن 0 است. به درخواست‌های خروجی و تنظیم پروکسی این نوشته ربطی ندارد.

تنظیم Proxy در نود مقدم است یا متغیر محیطی؟

تنظیم نود. مستندات n8n همین را می‌گوید؛ در آزمون محلی ما هم وقتی متغیر محیطی به یک پورت بسته اشاره می‌کرد، نودی که گزینه Proxy آن پر بود از پروکسی خودش خارج شد.

آیا Zapier هم همین تنظیم را دارد؟

نه. گام Webhooks در Zapier فیلدهای آدرس، داده، سرآیند و احراز هویت پایه دارد؛ فیلد پروکسی ندارد. برای عبور دادن درخواست از پروکسی باید یک سرویس کوچک از خودتان در میان بگذارید: Zapier به آن سرویس درخواست می‌فرستد و سرویس از طریق پروکسی به مقصد می‌رود.

آیا ناچارم رمز پروکسی را به‌صورت متن ساده در گردش کار نگه دارم؟

اگر از گزینه نود استفاده می‌کنید بله، این فیلد متن ساده است. در نصب self-hosted راه بیرون آوردن رمز از گردش کار متغیرهای محیطی است: اطلاعات ورود در پیکربندی سرور می‌ماند و وارد JSON گردش کار نمی‌شود. اگر سروری با IP ثابت دارید، لیست سفید IP رمز را به‌کلی کنار می‌گذارد.

آیا با HTTP Request می‌توان از هر سایتی داده گرفت؟

نه. این نود JavaScript اجرا نمی‌کند و به همین دلیل در صفحه‌هایی که محتوا در مرورگر ساخته می‌شود فیلد موردنظر شما در پاسخ نیست. سایت‌هایی که محافظت در برابر ربات دارند هم ممکن است مستقل از پروکسی صفحه راستی‌آزمایی برگردانند. در چنین وضعی کار درست فشار آوردن به محافظت نیست، بلکه سر زدن به API رسمی سایت یا گزینه‌های همکاری داده‌ای آن است.

خلاصه

در n8n پروکسی در دو جا تعریف می‌شود: فیلد Proxy در بخش Options نود HTTP Request و متغیرهای HTTP_PROXY، HTTPS_PROXY و NO_PROXY در نصب self-hosted. اطلاعات ورود درون آدرس نوشته می‌شود، تنظیم نود بر تنظیم سراسری مقدم است و N8N_PROXY_HOPS فقط به نصب‌های پشت پروکسی معکوس مربوط است. پروکسی جای محدودیت نرخ را نمی‌گیرد: با Batching یا Wait سرعت را کم کنید، با دیدن 429 صبر کنید و اگر API رسمی هست همان را انتخاب کنید. انواع IP مناسب گردش کارهایتان را می‌توانید در صفحه خدمات پروکسی ما مقایسه کنید.

پرسش از ChatGPTپرسش از Claude