وقتی با کد HTTP کار می کنید، ابزار خط فرمان curl یک دستیار عالی است. درخواستها را آزمایش کنید، قالبهای داده را کاوش کنید، و موارد دیگر!
پروتکل انتقال ابرمتن (HTTP) ستون فقرات ارتباط از طریق اینترنت است که امکان انتقال داده ها را بین سرورها و کلاینت ها فراهم می کند. با این حال، تعامل با نقاط پایانی HTTP می تواند چالش برانگیز باشد، به خصوص برای مبتدیان.
خوشبختانه، curl، یک ابزار خط فرمان، راهی آسان و کارآمد برای ارسال و دریافت درخواستهای HTTP ارائه میکند. در اینجا یاد خواهید گرفت که چگونه از curl برای ایجاد درخواست های HTTP اولیه POST، GET، DELETE و PUT استفاده کنید.
نصب کرل
به طور پیش فرض، curl بر روی سیستم عامل های اصلی از جمله macOS، Linux و Unix نصب می شود.
با اجرای دستور زیر می توانید تأیید کنید که curl را نصب کرده اید:
curl
دستور بالا باید «برای اطلاعات بیشتر «curl –help» یا «curl –manual» را امتحان کنید» در ترمینال شما.
اگر curl روی سیستم عامل شما نصب نیست، می توانید آن را از صفحه دانلودهای curl دانلود و نصب کنید.
ایجاد یک درخواست HTTP GET
درخواست HTTP GET روشی برای درخواست داده از یک وب سرور است. می توانید از این درخواست ها برای بازیابی یک منبع خاص مانند یک صفحه وب، تصویر یا ویدیو استفاده کنید.
شما می توانید یک درخواست GET با curl در قالب زیر ایجاد کنید:
curl -X GET <URL>
مثلا:
curl -X GET https://example.com/todos/1
اجرای دستور بالا یک درخواست HTTP GET به URL https://example.com/todos/1 می دهد. گزینه -X GET مشخص می کند که روش HTTP GET است. هنگامی که دستور اجرا می شود، curl یک درخواست GET را به سرور مشخص شده در URL ارسال می کند و منتظر پاسخ سرور می ماند.
اگر سرور با یک کد وضعیت موفق پاسخ دهد، curl بدنه پاسخ را در ترمینال نشان میدهد، که در این مورد، دادههای JSON در مورد یک مورد کاری با شناسه 1 خواهد بود.
همچنین، میتوانید درخواست GET را بدون مشخص کردن پرچم -X انجام دهید، زیرا بهطور پیشفرض، زمانی که روش درخواستی با پرچم -X تعیین نمیکنید، curl یک درخواست GET میدهد.
مثلا:
curl https://example.com/todos/1
اجرای دستور بالا همان پاسخ دستور قبلی را با پرچم “-X GET” نشان می دهد.
ایجاد یک درخواست HTTP POST
درخواست HTTP POST روشی برای ذخیره داده ها در یک وب سرور است. برخلاف درخواست GET که داده ها را به عنوان بخشی از URL ارسال می کند، درخواست POST داده ها را در متن پیام درخواست ارسال می کند. این باعث می شود درخواست های POST برای انتقال اطلاعات حساس ایمن تر شود.
می توانید یک درخواست POST با curl در قالب زیر ایجاد کنید:
curl -X POST -d <data> <URL>
مثلا:
curl -X POST -d 'name=jack' -d 'email=jack@example.com' \
https://example.com/users
دستور بالا یک درخواست POST به https://example.com/users با داده های مشخص شده توسط پرچم -d به عنوان یک بار ارسال می کند.
پرچم -d داده های ارسالی را مشخص می کند. در این مورد، دو پارامتر داده را مشخص کرد: name=jack و email=jack@example.com.
هنگامی که بیش از یک بار از پرچم -d در یک دستور استفاده می کنید، می توانید فیلدها را با استفاده از نماد & ادغام کنید.
مثلا:
curl -d "name=jack&email=jack@example.com" https://example.com/api/users
برخی از داده هایی که ممکن است سعی کنید در یک درخواست POST ارسال کنید ممکن است به سختی در یک رشته در ترمینال شما قرار بگیرند. در مواردی مانند این، خواندن و ارسال داده ها از یک فایل با استفاده از curl ممکن است ایده آل باشد.
برای ارسال دادهها از یک فایل در یک درخواست POST بهعنوان محموله با curl، از علامت @ بلافاصله بعد از پرچم -d استفاده کنید و سپس از مسیر فایل به فایلی که میخواهید curl در درخواست ارسال کند، استفاده کنید.
مثلا:
curl -X POST -d @users.txt https://example.com/api/users
تعیین نوع محتوا
استفاده از پرچم -d به طور خودکار هدر Content-Type را روی application/x-www-form-urlencoded تنظیم می کند. با این حال، میتوانید بهطور دستی نوع محتوای مناسب را برای درخواست خود با استفاده از پرچم -H یا —به دنبال نوع محتوای مورد نظر تعیین کنید.
مثلا:
curl -H "Content-Type: application/json" \
-d '{"name": "Jack", "email": "jack@example.com"}' \
https://example.com/api/users
در دستور بالا، پرچم -H هدر Content-Type را به عنوان Content-Type: application/json مشخص می کند.
میتوانید برنامه/json را با هر نوع MIME یا نوع محتوای معتبر دیگری که برای دادههایی که در بدنه درخواست ارسال میکنید مناسب است جایگزین کنید. برای مثال، هنگام آپلود دادههای باینری، مانند تصویر یا فایل صوتی، باید Content-Type را روی Multipart/form-data تنظیم کنید.
این به شما امکان می دهد قالب مورد انتظار داده های ارسال شده را مشخص کنید، که می تواند هنگام تعامل با API ها یا سرویس های وب که به انواع محتوای خاصی برای پردازش مناسب نیاز دارند، مهم باشد.
ایجاد یک درخواست HTTP PUT
درخواست HTTP PUT روشی برای به روز رسانی یک منبع موجود در یک وب سرور یا ایجاد آن در صورت عدم وجود منبع است. تفاوت این روش با روش POST به این معناست که غیر توانمند است. این بدان معنی است که فراخوانی متد PUT یک یا چند بار متوالی تأثیر یکسانی روی سرور دارد.
می توانید یک درخواست PUT با curl در قالب زیر ایجاد کنید:
curl -X PUT -H "Content-Type: application/json" \
-d '{"name": "Jack Bauer", "email": "jackbauer024@example.com"}' \
https://example.com/api/users/4
دستور بالا یک درخواست PUT را با فرمت JSON به وب سرور مشخص شده در URL بالا ارسال می کند و منبع مشخص شده را به روز می کند. اگر منبع مشخص شده وجود نداشته باشد، منبع را در وب سرور ایجاد می کند.
ایجاد یک درخواست حذف HTTP
درخواست HTTP DELETE روشی برای حذف یک منبع مشخص از یک وب سرور است. مشابه درخواستهای PUT، درخواستهای DELETE فاقد قدرت هستند. ارسال یک درخواست DELETE چندین بار به یک منبع، نتیجه یکسانی را در سرور ایجاد می کند.
با اجرای دستور زیر می توانید یک درخواست DELETE با curl ایجاد کنید:
curl -X DELETE http://example.com/api/users/3
دستور بالا یک درخواست DELETE را به سرور وب مشخص شده در URL بالا ارسال می کند و منبع مشخص شده را حذف می کند.
حذف درخواست ها به طور دائم منبع مشخص شده را از سرور حذف می کند. بنابراین، وب سروری که از DELETE پشتیبانی می کند، معمولاً قبل از اینکه بتوانید این درخواست را انجام دهید، به نوعی تأیید اعتبار یا مجوز نیاز دارد.
در اینجا نحوه ایجاد یک درخواست DELETE با هدر مجوز آورده شده است:
curl -X DELETE -H "Authorization: Bearer my_access_token" \
https://example.com/api/users/3
دستور بالا اطلاعات احراز هویت را در هدر درخواست با استفاده از روش احراز هویت حامل با پرچم -H ارائه می کند. مجوز: حامل my_access_token مقدار هدر است. my_access_token یک مکان نگهدار برای ارزش توکن دسترسی واقعی شما است.
راه های دیگر برای درخواست HTTP
جدای از curl، روش های مختلفی برای ایجاد درخواست های HTTP بسته به زمینه درخواست وجود دارد. رایجترین روشها شامل استفاده از یک مرورگر وب مانند کروم، یک ابزار رابط کاربری گرافیکی مانند Postman یا یک کلاینت API است.
هر کدام از این گزینه ها مزایا و معایب خود را دارند. در نهایت، انتخاب ابزار شما به نیازهای کار شما بستگی دارد.