curl(مخفف Client URL) یک مرورگر وب بدون گرافیک و واسط کاربری است که مستقیماً درون ترمینال شما زندگی میکند.
همانطور که شما در مرورگر (مثل کروم یا فایرفاکس) آدرسی را وارد میکنید تا سایتی را ببینید، عکسی دانلود کنید یا فرمی را پر کنید، curl هم دقیقاً همین کارها را انجام میدهد، اما به صورت متنی، با سرعت بالا و با قابلیت اتوماسیون (اسکریپتنویسی). این ابزار از انواع پروتکلهای شبکه مثل HTTP، HTTPS، FTP، SFTP و غیره پشتیبانی میکند و ابزار دست هر متخصص شبکه، مدیر سرور (SysAdmin) و برنامهنویسی است.
راهنمای عملی و کاربردی کار با curl
در ادامه پرکاربردترین و جذابترین کارهایی که میتوانید با این ابزار انجام دهید را همراه با مثالهای عملی بررسی میکنیم:
۱. سادهترین کار: دریافت محتوای یک صفحه (GET Request)
اگر بخواهید کدهای HTML یا پاسخ یک وبسایت را در ترمینال ببینید، کافی است نام ابزار و آدرس سایت را وارد کنید:
curl https://example.com
۲. دانلود و ذخیره فایلها
به طور پیشفرض، curl محتوا را در ترمینال چاپ میکند. برای ذخیره کردن آن به صورت یک فایل، دو راه دارید:
- استفاده از سوییچ
-o(حروف کوچک): برای ذخیره فایل با نام دلخواه شما.
curl -o my_page.html https://example.com
- استفاده از سوییچ
-O(حروف بزرگ): فایل را با همان نام اصلی خودش در سرور دانلود میکند.
curl -O https://example.com/images/logo.png
۳. ادامه دادن دانلودهای نصفه کاره (Resume)
اگر در حال دانلود فایل حجیمی بودید و اینترنت قطع شد، نیازی نیست از اول شروع کنید! با سوییچ -C - دانلود را از همانجایی که قطع شده ادامه دهید:
curl -C - -O https://example.com/largefile.zip
۴. مشاهده هدرهای HTTP (اطلاعات پشت صحنه سایت)
گاهی برای عیبیابی (Troubleshooting) یا بررسی وضعیت سرور، نیاز دارید هدرهای پاسخ سرور (مثل وضعیت کد 200 یا 404، نوع سرور و کوکیها) را ببینید. با سوییچ -I فقط هدرها را دریافت کنید:
curl -I https://example.com
۵. دنبال کردن لینکهای تغییر مسیر (Redirects)
خیلی از سایتها درخواستها را از HTTP به HTTPS یا به آدرس دیگری Redirect میکنند. curl به طور پیشفرض این مسیر را دنبال نمیکند مگر اینکه از سوییچ -L استفاده کنید:
curl -L http://google.com
۶. ارسال اطلاعات به سرور (POST Request)
اگر در حال تست یک API هستید و میخواهید دادهای را به سرور ارسال کنید (مثلاً پر کردن یک فرم یا ارسال یک جابجایی)، از سوییچ -X POST و -d برای دادهها استفاده کنید:
curl -X POST -d "param1=value1¶m2=value2" https://example.com/api
یا اگر دادههای شما به صورت JSON است:
curl -X POST -H "Content-Type: application/json" -d '{"name": "Saleh", "role": "Admin"}' https://example.com/api/users
۷. استفاده از پروکسی و تونلزنی
اگر سرور شما پشت فایروال است یا میخواهید ترافیک را از یک پروکسی (مثل HTTP یا SOCKS5) عبور دهید، curl این کار را با سوییچ -x به راحتی انجام میدهد:
curl -x socks5h://127.0.0.1:1080 https://example.com
۸. احراز هویت (Authentication)
اگر سایتی نیاز به نام کاربری و رمز عبور دارد (Basic Authentication)، میتوانید آن را با سوییچ -u ارسال کنید:
curl -u username:password https://example.com/protected
قابلیتهای پیشرفته و جذاب دیگر
- محدود کردن سرعت دانلود: برای اینکه پهنای باند سرور کاملاً اشغال نشود:
curl --limit-rate 50k -O https://example.com/file.zip
- تغییر User-Agent: معرفی کردن ترمینال به عنوان یک مرورگر خاص (مثلاً کروم در ویندوز) برای دور زدن محدودیت برخی سایتها:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://example.com
- ساکت کردن خروجی (Silent Mode): حذف کردن نوار پیشرفت دانلود و پیامهای اضافه (بسیار کاربردی در اسکریپتها):
curl -s https://example.com
رقبای curl
به طور کلی، اصلیترین رقبای curl ابزارهای wget و httpie هستند. در ادامه هرکدام را بررسی کرده و برتریهایشان را با هم مقایسه میکنیم:
۱. ابزار wget (قدیمی، جانسخت و متخصص دانلود)
اگر curl مثل یک چاقوی سوئیسی ظریف باشد، wget مثل یک بولدوزر است. wget یک ابزار خط فرمان خالص برای دانلود فایل از وب است.
برتریهای wget نسبت به curl:
- دانلود بازگشتی (Recursive Download): بزرگترین برگ برنده
wgetاینجاست. شما میتوانید یک آدرس به آن بدهید و بگویید «تمام صفحات، عکسها و لینکهای این سایت را دانلود کن و یک نسخه آفلاین از آن بساز».curlاصلاً چنین قابلیتی ندارد. - تابآوری بالا در برابر قطعی اینترنت:
wgetبه شدت در دانلودهای طولانی و ناپایدار سرسخت است. اگر ارتباط قطع شود، آنقدر تلاش میکند (Retry) تا فایل را بالاخره کامل دانلود کند. - سادگی در دانلود مستقیم: برای دانلود یک فایل ساده، نیازی به سوییچهای اضافه ندارد؛ فقط کافی است بنویسید
wget urlتا فایل ذخیره شود (درcurlباید حتماً از سوییچ-Oاستفاده کنید).
۲. ابزار httpie (مدرن، زیبا)
ابزار httpie (بخوانید اِیچتیتیپای) یک جایگزین مدرن و انسانمحور برای curl است که با زبان پایتون نوشته شده و هدفش راحتتر کردن کار با APIها در ترمینال است.
برتریهای httpie نسبت به curl:
-
خروجی رنگی و خوانا (Syntax Highlighting): برعکس
curlکه همه چیز را به صورت متن خام و سیاهوسفید چاپ میکند،httpieکدهای JSON و HTML را به صورت خودکار رنگآمیزی و مرتب (Pretty-print) میکند تا خواندنشان راحت باشد. -
سینتکس بسیار ساده برای APIها: برای ارسال یک درخواست POST با فرمت JSON در
curlباید هدر و ساختار سختی بنویسید، اما درhttpieهمهچیز بسیار طبیعی است: -
مثال در httpie:
http POST api.com name=Saleh -
تشخیص خودکار هدرها: نیازی نیست به آن بگویید فرمت داده چیست؛ خودش میفهمد که دارید درخواست JSON میفرستید و هدرهای لازم را تنظیم میکند.
حالا برتری curl در چیست؟
با وجود این رقبای قدرتمند، چرا curl هنوز ابزار اول دنیاست؟
- کتابخانه
libcurl: قلب تپندهcurlیک کتابخانه به نامlibcurlاست. این کتابخانه در پشت صحنه هزاران نرمافزار، اسکریپت، زبانهای برنامهنویسی (مثل PHP و Python) و حتی سیستمعاملها (مثل مک و ویندوز و ماشینهای هوشمند) برای جابجایی اطلاعات استفاده میشود. - سرعت و سبکی بینظیر: چون با زبان C نوشته شده، به شدت سریع است و حداقل مصرف رم و پردازنده را دارد (برعکس
httpieکه چون پایتونی است کمی سنگینتر است). - انعطافپذیری بینهایت: تعداد سوییچها و آپشنهای کنترل ترافیک، کوکیها، پروکسیها و پروتکلها در
curlبا هیچ ابزار دیگری قابل مقایسه نیست.