سرور بالاست؟


به عنوان تمرین دوم، سلیب و علی‌رضا و عرشیا می‌خواهند یک مشکل از مشکلاتی که در ایران بسیار با آن مواجه می‌شوند را برای همیشه حل کنند.

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

برای رفع این مشکل به صورت ابدی، سلیب یک سرور درون آدرسی بالا می‌آورد که یک ویژگی منحصر به فرد دارد. اگر به این سرور هرگونه ریکوئستی از نوع GET بزنیم به طور کاملا تصادفی یکی از استاتوس‌‌کد‌های زیر را بر‌می‌گرداند:

  • ممکن است استاتوس‌کد 200 (HTTP_200_OK) را برگرداند که در این صورت اتصال ما با موفقیت انجام شده و هیچ مشکلی وجود ندارد.
  • ممکن است یکی از استاتوس‌کدهای 400 (HTTP_400_BAD_REQUEST) یا 403 (HTTP_403_FORBIDDEN) یا 404 (HTTP_404_NOT_FOUND) یا 500 (HTTP_500_INTERNAL_SERVER_ERROR) را برگرداند که در هر صورت اتصال ما با چالش‌هایی مواجه شده و نیاز داریم تا دوباره به آدرس مورد نظرمان ریکوئست بزنیم و منتظر برقراری ارتباطی صحیح با استاتوس‌کد 200 بمانیم.

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

با ارسال هر ریکوئست از نوع GET به سرور مورد نظر ما، پاسخی مطابق زیر دریافت می‌شود:

[<STATUS_CODE>]
Plain text

برای مثال اگر درخواست ما با استاتوس‌کد 404 مواجه شود، سرور پاسخ زیر را برای ما ارسال می‌کند:

[404]
Plain text

اسکریپت ارسالی شما باید پاسخ هر ریکوئست را در قالب زیر در ترمینال چاپ کند:

ret is: [<STATUS_CODE>]
Plain text

برای مثال اگر سرور به ما پاسخی با استاتوس‌کد 404 داد، باید خروجی زیر نمایش داده شود:

ret is: [404]
Plain text

مثال🔗

برای مثال اگر اسکریپت شما را مانند زیر اجرا کنیم:

./retry.sh <SERVER_ADDRESS>
Bash

باید خروجی زیر را دهد:

ret is: [403]
ret is: [500]
ret is: [403]
ret is: [400]
ret is: [404]
ret is: [404]
ret is: [200]
Plain text
  • به محض دریافت ریکوئستی با استاتوس‌کد 200، دیگر ریکوئستی ارسال نمی‌شود و برنامه به کار خود خاتمه می‌دهد.

پروژه اولیه🔗

برای دریافت پروژه اولیه این لینک را دانلود کنید. درون لینک ساختار فایلی زیر را مشاهده می‌کنید:

Dobare_Talash_Kon
└── retry.sh
Plain text

راه‌حل خود را درون فایل retry.sh پیاده‌سازی کنید. برای اطمینان نسبی از پاسخ‌تان می‌توانید از تست‌های نمونه مسئله استفاده کنید. برای این کار کافی‌ست از طریق دکمه «اجرای تست نمونه» پاسخ‌تان را برای کوئرا ارسال کنید.

توجه کنید🔗

  • فراموش نکنید که اسکریپتی کامل را در پاسخ‌تان تحویل دهید.
  • فراموش نکنید که اسکریپت خود را درون فایلی با نام retry.sh وارد نمایید.
  • برای ارسال پاسخ خود کافی‌ست فایل retry.sh را آپلود کنید.
  • در نظر داشته باشید که تا وقتی در جواب استاتوس کد 200 دریافت نکرده‌اید باید به ریکوئست زدن ادامه دهید.
  • همچنین پاسخ ارسالی شما باید به محض دریافت استاتوس‌کد 200 و چاپ خروجی خواسته شده به کار خود پایان دهد و هیچ ریکوئست دیگری به سرور ارسال نکند.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.