Future ForgeFuture ForgeFuture ForgeFuture Forge
خدماتنمونه‌کارهاپکیج‌هاابزارهای رایگانیادداشت‌هادرباره ماتماس
شروع پروژه
  1. خانه
  2. /یادداشت‌ها
Future ForgeFuture Forge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
Future ForgeFuture Forge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

خدمات

طراحی و ساخت محصولتوسعه فول‌استکممیزی مهندسیمشاوره معماریزیرساخت و استقرارهوش مصنوعی در محصول

کاوش

نمونه‌کارهایادداشت‌هاپرسش‌هاپکیج‌ها

ابزارهای رایگان

ممیزی مهندسیمشاور معماریتخمین پروژهابزار پرامپت

شرکت

درباره ماتماسحریم خصوصیشرایط استفاده

پروژه‌تان را مطرح کنید

مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ می‌کنیم.

پروژه‌تان را مطرح کنید

ارتباط

hello@futureforge.ir09128464105
GitHubLinkedIn

© 2026 FutureForge. همه حقوق محفوظ است.

خانهخدماتابزارهای رایگانشروع پروژه
عملیات و استقرار

curl در لینوکس: گفت‌وگو با HTTP و API از خط فرمان

کار با curl برای GET/POST، هدر، کد وضعیت، JSON، دانلود و عیب‌یابی TLS — فرمان‌های واقعی روزمرهٔ توسعه‌دهنده.

سا
سهیل ابراهیم‌پور

بنیان‌گذار و مهندس محصول

·۲۹ شهریور ۱۴۰۵·4 دقیقه مطالعه
curlHTTP clientAPI testingcurl -Icurl -X POSTheadersTLS
ترمینال curl -I و استیکی curl

قبل از باز کردن Postman یا نوشتن اسکریپت تست، اغلب یک سؤال ساده دارید: آیا این URL از این سرور پاسخ می‌دهد و با چه کدی؟ curl کلاینت انتقال داده از خط فرمان است که برای HTTP/HTTPS در کار روزمرهٔ توسعه و عملیات تقریباً همه‌جا هست. قدرت آن در کنترل دقیق هدر، متد، بدنه و مشاهدهٔ جزئیات پروتکل است — نه فقط «دانلود فایل».

مقایسه با wget در مقالهٔ بعدی می‌آید؛ اینجا خود curl برای API و عیب‌یابی.

اجزای request response GET headers body

پاسخ کوتاه

برای دیدن پاسخ: `curl -sS URL`. برای کد وضعیت و هدر: `curl -sS -D - -o /dev/null URL` یا `curl -I`. برای POST JSON هدر Content-Type و `-d` را بگذارید. `-v` یا `--trace-time` برای عیب‌یابی TLS و مسیر.redirect. همیشه در اسکریپت `-f` یا چک کردن کد خروج/وضعیت را جدی بگیرید تا شکست HTTP خاموش نماند.

curl آینهٔ رفتار کلاینت است؛ اگر اینجا درست است و مرورگر نه، فرق هدر و کوکی را بجویید نه «خراب بودن سرور» را.

GET ساده و سکوت مفید

bash

curl https://example.com/ curl -sS https://example.com/ | head curl -sS -o body.txt -w '%{http_code}\n' https://example.com/

-s پیشرفت را خاموش می‌کند؛ -S خطا را حتی در حالت silent نشان می‌دهد — ترکیب رایج اسکریپت‌ها. -w متغیرهای خروجی مثل http_code را بعد از تمام شدن چاپ می‌کند.

هدر و متد

bash

curl -I https://example.com/ curl -sS -D - -o /dev/null https://example.com/ curl -X OPTIONS -sS -D - -o /dev/null https://api.example.com/v1/items

-I معادل GET با بدنه‌نخواستن برای بسیاری سرورها نیست؛ HEAD می‌فرستد. برای دیدن هدرهای پاسخ یک GET واقعی، -D - همراه دور ریختن بدنه تمیزتر است.

POST و JSON

bash

curl -sS -X POST https://api.example.com/v1/items \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer TOKEN' \ -d '{"name":"demo","ok":true}'

از فایل:

bash

curl -sS -X POST https://api.example.com/v1/items \ -H 'Content-Type: application/json' \ --data-binary @payload.json

توکن را در تاریخچهٔ شل سخت‌کد نکنید؛ از متغیر محیطی یا فایل با مجوز محدود بخوانید.

bash

curl -sS -H "Authorization: Bearer ${API_TOKEN}" https://api.example.com/v1/me

فرم، آپلود، دانلود

bash

curl -sS -F 'file=@./report.pdf' https://example.com/upload curl -sS -L -o image.png https://example.com/image.png curl -sS -C - -O https://example.com/big.iso

-L ریدایرکت را دنبال می‌کند (مراقب حلقه و تغییر متد باشید). -C - ادامهٔ دانلود ناقص، -O نام فایل را از URL می‌گیرد.

TLS، زمان و عیب‌یابی

bash

curl -v https://example.com/ 2>&1 | head -n 40 curl -sS --connect-timeout 3 --max-time 10 https://example.com/ curl -sS -w 'dns:%{time_namelookup} connect:%{time_connect} tls:%{time_appconnect} total:%{time_total}\n' -o /dev/null https://example.com/

هرگز در production به‌عادت `curl -k` نزنید مگر برای آزمایش کنترل‌شده با گواهی خودامضا؛ مشکل گواهی را درست کنید. جزئیات بیشتر زمان‌بندی به عیب‌یابی شبکه کمک می‌کند.

کد خروج در برابر کد HTTP

به‌صورت پیش‌فرض curl حتی با پاسخ 404 ممکن است کد خروج صفر بدهد چون انتقال موفق بوده. برای شکست‌خوردن روی خطای HTTP:

bash

curl -sS -f https://example.com/missing || echo "HTTP error or transfer fail"

یا کد را با -w بخوانید و در اسکریپت شاخه بزنید. این تفاوت علت باگ‌های CI است که «curl سبز بود ولی API خطا داد».

پروکسی و محیط

bash

curl -sS -x http://proxy.example.com:8080 https://example.com/ env | grep -i proxy

متغیرهای http_proxy/HTTPS_PROXY روی رفتار اثر می‌گذارند؛ در عیب‌یابی سازمانی اول محیط را چک کنید.

جدول میانبر روزمره

هدفالگو
بدنهٔ خامcurl -sS URL
فقط وضعیتcurl -sS -o /dev/null -w '%{http_code}\n' URL
هدر پاسخcurl -sS -D - -o /dev/null URL
JSON POSTcurl -sS -H Content-Type:application/json -d ... URL
جزئیات اتصالcurl -v URL

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

  • فراموش Content-Type در POST و تعجب از 415.
  • چسباندن توکن در اسکرین‌شات و لاگ CI.
  • استفاده از -k همه‌جا و پنهان شدن حملهٔ MITM.
  • فرض اینکه wget و curl همیشه یک رفتار ریدایرکت دارند.

خلاصه

curl ابزار دقیق حرف زدن با HTTP از ترمینال است: متد، هدر، بدنه، زمان، TLS. با -sS و -w اسکریپت‌پذیرش کنید، با -v عیب‌یابی کنید، و کد HTTP را از موفقیت انتقال جدا بفهمید. برای انتخاب بین curl و wget مقالهٔ بعدی را ببینید.

سوالات متداول

چرا در مرورگر ۲۰۰ است ولی curl گواهی خطا می‌دهد؟

ذخیرهٔ اعتماد CA روی سیستم curl، SNI، یا تفاوت IPv4/IPv6. -v و زنجیرهٔ گواهی را ببینید؛ گاهی مرورگر از store جدا استفاده می‌کند.

چطور چند هدر بفرستم؟

چند بار `-H 'Name: value'` تکرار کنید.

منابع و مراجع

  • curl — command line tool and library: https://curl.se/
  • curl man page online: https://curl.se/docs/manpage.html
  • HTTP response status codes (MDN): https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

نویسنده

سا

سهیل ابراهیم‌پور بنیان‌گذار FutureForge است. روی طراحی محصول، معماری و استقرار نرم‌افزار سفارشی کار می‌کند.

یادداشت‌های مرتبط

یادداشت‌های مرتبط

دسته‌بندی‌ها

خدمات مرتبط

از یادداشت تا پروژه

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

اگر در انتخاب معماری یا مسیر توسعه مطمئن نیستید، می‌توانید درباره پروژه صحبت کنیم.

مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ می‌کنیم.

سهیل ابراهیم‌پور
یادداشت‌ها
Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه
تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload
Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار
چرا همیشه به Kubernetes نیاز ندارید؟
Kubernetes چیست؟ اجرای مقاوم workloadهای کانتینری

عملیات و استقرار

Logging چیست؟ ثبت رویداد برای تشخیص و پاسخ به حادثه

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

تعیین اندازهٔ سرور: RAM، CPU و Storage بر اساس Workload

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

Docker در برابر Kubernetes؛ مقایسهٔ دقیق نه شعار

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

چرا همیشه به Kubernetes نیاز ندارید؟

۲۹ شهریور ۱۴۰۵

عملیات و استقرار

Kubernetes چیست؟ اجرای مقاوم workloadهای کانتینری

۲۹ شهریور ۱۴۰۵
همه یادداشت‌ها219
معماری نرم‌افزار13
واژه‌نامه37
عملیات و استقرار87
مهندسی محصول74
راهنمای وب8
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
پروژه‌تان را مطرح کنید
ابزارهای رایگان
پروژه‌تان را مطرح کنید