به عنوان تمرین دوم، سلیب و علیرضا و عرشیا میخواهند یک مشکل از مشکلاتی که در ایران بسیار با آن مواجه میشوند را برای همیشه حل کنند.
آنها همواره در تلاش برای برقراری ارتباط با وبسایتی هستند که به خاطر حجم زیاد درخواستها توان پاسخگویی ندارد.
برای رفع این مشکل به صورت ابدی، سلیب یک سرور درون آدرسی بالا میآورد که یک ویژگی منحصر به فرد دارد. اگر به این سرور هرگونه ریکوئستی از نوع 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
به سرور مورد نظر ما، پاسخی مطابق زیر دریافت میشود:
برای مثال اگر درخواست ما با استاتوسکد 404
مواجه شود، سرور پاسخ زیر را برای ما ارسال میکند:
اسکریپت ارسالی شما باید پاسخ هر ریکوئست را در قالب زیر در ترمینال چاپ کند:
برای مثال اگر سرور به ما پاسخی با استاتوسکد 404
داد، باید خروجی زیر نمایش داده شود:
برای مثال اگر اسکریپت شما را مانند زیر اجرا کنیم:
باید خروجی زیر را دهد:
200
، دیگر ریکوئستی ارسال نمیشود و برنامه به کار خود خاتمه میدهد.برای دریافت پروژه اولیه این لینک را دانلود کنید. درون لینک ساختار فایلی زیر را مشاهده میکنید:
راهحل خود را درون فایل retry.sh
پیادهسازی کنید. برای اطمینان نسبی از پاسختان میتوانید از تستهای نمونه مسئله استفاده کنید. برای این کار کافیست از طریق دکمه «اجرای تست نمونه» پاسختان را برای کوئرا ارسال کنید.
retry.sh
وارد نمایید.retry.sh
را آپلود کنید.200
دریافت نکردهاید باید به ریکوئست زدن ادامه دهید.200
و چاپ خروجی خواسته شده به کار خود پایان دهد و هیچ ریکوئست دیگری به سرور ارسال نکند.