درخواست HTTP
HTTP Request
ارسال درخواست HTTP به هر API، دریافت و پردازش داده با انواع احراز هویت
نمای کلی
نود HTTP Request ابزاری همهکاره برای ارتباط با APIهای خارجی و داخلی است.
قابلیتهای کلیدی:
- ارسال درخواستهای GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
- پشتیبانی از JSON, Form Data, Multipart/Form-Data
- ارسال و دریافت فایل (Binary Data)
- احراز هویت: API Key, Basic Auth, OAuth2, Bearer Token, Digest Auth
- کار با Headerها و Query Parameters
- Pagination خودکار
- Retry on Fail
- Response Filtering
- SSL Certificate Verification
- Proxy Support
- GraphQL Queries
- XML/SOAP Support
کاربردها:
- اتصال به هر API که نود اختصاصی ندارد
- ارسال داده به سرویسهای خارجی
- دریافت اطلاعات از منابع مختلف
- یکپارچهسازی Microservices
- فراخوانی Webhookهای سرویسهای دیگر
- دانلود و آپلود فایل
- تست و Debug کردن APIها
- Web Scraping (دریافت HTML)
چرا HTTP Request مهم است؟
n8n برای سرویسهای محبوب نودهای اختصاصی دارد (Gmail, Telegram, ...) ولی برای هزاران API دیگر، HTTP Request تنها راه ارتباط است.
احراز هویت
روشهای احراز هویت
1. بدون احراز هویت (None)
برای APIهای عمومی بدون نیاز به کلید:
URL: https://api.exchangerate.host/latest?base=USD
Method: GET
Authentication: None2. Header Authentication (رایجترین)
API Key در Header:
#### Bearer Token:
Header: Authorization
Value: Bearer sk-abc123...
// یا
Header: X-API-Key
Value: your-api-key#### تنظیم در n8n:
- 1Credentials > Header Auth
- 2Name: Authorization
- 3Value: Bearer YOUR_TOKEN
3. Basic Auth
Username و Password:
Username: my_user
Password: my_password
// n8n خودکار Base64 encode میکند
// Header: Authorization: Basic base64(user:pass)4. OAuth2
برای سرویسهایی مثل Google, GitHub, Twitter:
- 1Client ID و Client Secret از سرویس دریافت کنید
- 2در n8n: Credentials > OAuth2
- 3Authorization URL و Token URL وارد کنید
- 4Scopes مورد نیاز
- 5Connect بزنید
5. Query Parameter Auth
API Key در URL:
URL: https://api.example.com/data?api_key=YOUR_KEY&format=json6. Digest Auth
احراز هویت پیشرفته (برای برخی سرویسها):
- Username و Password مانند Basic ولی امنتر
نکات امنیتی:
- API Keyها را در Credentials ذخیره کنید نه در URL
- از Environment Variables استفاده کنید
- HTTPS همیشه استفاده کنید
- هرگز کلیدها را در لاگ چاپ نکنید
عملیاتهای موجود
GET
دریافت اطلاعات از API (Read/خواندن)
POST
ارسال داده جدید به API (Create/ایجاد)
PUT
جایگزینی کامل یک رکورد (Full Update)
PATCH
تغییر بخشی از رکورد (Partial Update)
DELETE
حذف یک رکورد
HEAD
فقط هدرهای پاسخ (بدون بدنه)
کاربردهای متداول
1. دریافت نرخ ارز
دریافت قیمت لحظهای:
Schedule (هر ساعت)
→ HTTP Request (GET)
URL: https://api.exchangerate.host/latest
Query: base=USD&symbols=IRR,EUR,GBP
→ Set (فرمت فارسی)
→ Telegram (ارسال نرخها)2. ارسال داده به API
ثبت سفارش در سیستم دیگر:
Webhook (سفارش جدید)
→ HTTP Request (POST)
URL: https://crm.example.com/api/orders
Content-Type: JSON
Body: {
"customer": "{{$json.name}}",
"phone": "{{$json.phone}}",
"items": {{JSON.stringify($json.items)}},
"total": {{$json.total}}
}
Headers:
Authorization: Bearer {{$credentials.apiKey}}
Content-Type: application/json
→ IF (statusCode == 201)
→ MySQL (ثبت موفق)
→ Else: Telegram (خطا)3. Pagination - دریافت همه صفحات
دریافت لیست کامل با صفحهبندی:
Set (page = 1, allData = [])
→ Loop
→ HTTP Request (GET)
URL: https://api.example.com/users
Query: page={{$json.page}}&limit=100
→ Code (اضافه به allData)
→ IF (hasNextPage)
→ Set (page++)
→ Back to Loop
→ Else: خروج4. آپلود فایل (Multipart)
ارسال فایل به API:
Google Drive (Download file)
→ HTTP Request (POST)
URL: https://api.example.com/upload
Content-Type: Multipart/Form-Data
Body:
file: {{$binary.data}}
description: "فایل بکآپ"5. دانلود فایل
دریافت فایل از URL:
HTTP Request (GET)
URL: https://example.com/report.pdf
Response Format: File
→ Google Drive (Upload)
→ Gmail (ارسال به ایمیل)6. GraphQL Query
درخواست GraphQL:
HTTP Request (POST)
URL: https://api.example.com/graphql
Content-Type: JSON
Body: {
"query": "query { users(limit: 10) { id name email } }",
"variables": {}
}7. SOAP/XML Request
ارسال درخواست SOAP:
HTTP Request (POST)
URL: https://api.example.com/soap
Content-Type: Raw (text/xml)
Body:
<?xml version="1.0"?>
<soap:Envelope>
<soap:Body>
<GetPrice>
<Item>Widget</Item>
</GetPrice>
</soap:Body>
</soap:Envelope>8. Web Scraping
دریافت محتوای وب:
HTTP Request (GET)
URL: https://example.com/products
Response Format: Text (HTML)
→ Code (Parse HTML با regex یا cheerio)
→ MySQL (ذخیره داده)9. Health Check سرویسها
بررسی وضعیت APIها:
Schedule (هر 5 دقیقه)
→ HTTP Request (GET)
URL: https://api.myservice.com/health
Timeout: 5000
→ IF (status != 200 OR timeout)
→ Telegram (هشدار: سرویس Down)
→ MySQL (لاگ)10. Chained API Calls
فراخوانی APIهای وابسته:
HTTP Request 1 (POST: Login)
URL: https://api.example.com/auth/login
Body: {"email": "...", "password": "..."}
→ Set (token = response.token)
HTTP Request 2 (GET: Data)
URL: https://api.example.com/data
Headers: Authorization: Bearer {{$json.token}}
→ Process dataنکات حرفهای
نکات حرفهای
- 1URL داینامیک: از Expression استفاده کنید:
https://api.example.com/users/{{$json.userId}}/orders
https://api.example.com/search?q={{encodeURIComponent($json.query)}}- 1Query Parameters: از بخش جداگانه استفاده کنید (تمیزتر):
// به جای:
URL: https://api.com/data?page=1&limit=10&sort=name
// از:
URL: https://api.com/data
Query Parameters:
page: 1
limit: 10
sort: name- 1Response Format:
JSON: برای APIها (پیشفرض)
Text: برای HTML، XML، متن ساده
File: برای دانلود فایل (Binary)- 1Retry on Fail: برای درخواستهای مهم:
Retry on Fail: ON
Max Tries: 3
Wait Between Tries: 1000ms- 1Timeout: تنظیم مناسب:
API سریع: 10000 (10 ثانیه)
API معمولی: 30000 (30 ثانیه)
دانلود فایل: 300000 (5 دقیقه)- 1Content-Type Header:
JSON: application/json
Form: application/x-www-form-urlencoded
Multipart: multipart/form-data
XML: text/xml یا application/xml
Text: text/plain- 1Error Handling: بررسی Status Code:
HTTP Request → IF ({{$json.statusCode}} >= 400)
→ True: Error handling
→ False: Process data- 1دسترسی به پاسخ:
// بدنه پاسخ
{{$json.data}}
// Status Code
{{$response.statusCode}}
// هدرهای پاسخ
{{$response.headers['content-type']}}- 1Batch Requests: ارسال چند درخواست:
Split In Batches (10 عدد)
→ HTTP Request
→ Wait (100ms)
→ Merge Results- 1Proxy: برای دور زدن محدودیتها:
Proxy URL: http://proxy.example.com:8080- 1Self-signed Certificate:
Allow Unauthorized Certs: ON
// فقط برای تست! در Production SSL معتبر استفاده کنید- 1Pagination خودکار:
// n8n v1.x: Pagination Mode
Pagination Mode: Response Contains Next URL
Next URL: {{$response.body.next}}
Max Pages: 10- 1Binary Data: ارسال و دریافت فایل:
// دانلود
Response Format: File
Output: Binary Data
// آپلود
Content-Type: Multipart
Field: file → Binary Property: data- 1Cache Response: برای APIهای کند:
MongoDB (Check Cache)
→ IF (fresh) → Return cached
→ IF (stale) → HTTP Request → Save to Cache- 1API Rate Limit Management:
// بررسی هدرهای Rate Limit
X-RateLimit-Remaining: تعداد باقیمانده
X-RateLimit-Reset: زمان ریست
Retry-After: ثانیه انتظار
IF (remaining < 5) → Wait → Continueرفع مشکلات
خطاهای رایج
1. خطای 401 Unauthorized
علت: API Key، Token یا اطلاعات احراز هویت اشتباه
راهحل
- API Key را بررسی کنید
- فرمت Header:
Bearer TOKEN(با فاصله بعد از Bearer) - تاریخ انقضای Token
- Scope/Permission کافی
- از Postman تست کنید
2. خطای 403 Forbidden
علت: دسترسی ممنوع
راهحل
- IP Whitelist سرویس را بررسی کنید
- Plan/Subscription فعال باشد
- Scope/Permission لازم را داشته باشید
- CORS (فقط در Browser رخ میدهد، n8n مشکل ندارد)
3. خطای 404 Not Found
علت: آدرس URL اشتباه
راهحل
- URL را از مستندات API بررسی کنید
- Endpoint صحیح:
/api/v2/usersنه/api/users - نسخه API:
v1vsv2 - Trailing slash:
/usersvs/users/
4. خطای 429 Too Many Requests
علت: محدودیت Rate Limit
راهحل
- Wait Node بین درخواستها:
HTTP Request → Wait (1 second) → Next Request- Rate Limit API را بررسی کنید
- Retry-After header را بخوانید
- از Retry on Fail استفاده کنید
5. خطای 500 Internal Server Error
علت: خطای سمت سرور
راهحل
- بدنه درخواست را بررسی کنید
- فرمت داده صحیح باشد (JSON valid)
- از سرویسدهنده API بپرسید
- از Retry on Fail استفاده کنید
6. Timeout Error
علت: سرور به موقع پاسخ نمیدهد
راهحل
- Timeout افزایش دهید (پیشفرض: 300000ms)
- اتصال اینترنت سرور n8n
- وضعیت API مقصد
- Proxy تنظیمات
7. خطای "Invalid JSON"
علت: بدنه درخواست JSON معتبر نیست
راهحل
- JSON Validator استفاده کنید
- کوتیشنها:
"نه' - آخرین ویرگول اضافی نباشد
- Expressionها evaluate شوند
8. خطای SSL/Certificate
علت: گواهی SSL نامعتبر
راهحل
- Allow Unauthorized Certificates فعال کنید (فقط تست)
- CA Certificate اضافه کنید
- در Production: SSL معتبر استفاده کنید
