به عنوان تمرین دوم، سلیب و علیرضا و عرشیا میخواهند یک مشکل از مشکلاتی که در ایران بسیار با آن مواجه میشوند را برای همیشه حل کنند.
آنها همواره در تلاش برای برقراری ارتباط با وبسایتی هستند که به خاطر حجم زیاد درخواستها توان پاسخگویی ندارد.
برای رفع این مشکل به صورت ابدی، سلیب یک سرور درون آدرسی بالا میآورد که یک ویژگی منحصر به فرد دارد. اگر به این سرور هرگونه ریکوئستی از نوع 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>]
برای مثال اگر درخواست ما با استاتوسکد 404
مواجه شود، سرور پاسخ زیر را برای ما ارسال میکند:
[404]
اسکریپت ارسالی شما باید پاسخ هر ریکوئست را در قالب زیر در ترمینال چاپ کند:
ret is: [<STATUS_CODE>]
برای مثال اگر سرور به ما پاسخی با استاتوسکد 404
داد، باید خروجی زیر نمایش داده شود:
ret is: [404]
مثال
برای مثال اگر اسکریپت شما را مانند زیر اجرا کنیم:
./retry.sh <SERVER_ADDRESS>
باید خروجی زیر را دهد:
ret is: [403]
ret is: [500]
ret is: [403]
ret is: [400]
ret is: [404]
ret is: [404]
ret is: [200]
- به محض دریافت ریکوئستی با استاتوسکد
200
، دیگر ریکوئستی ارسال نمیشود و برنامه به کار خود خاتمه میدهد.
پروژه اولیه
برای دریافت پروژه اولیه این لینک را دانلود کنید. درون لینک ساختار فایلی زیر را مشاهده میکنید:
Dobare_Talash_Kon
└── retry.sh
راهحل خود را درون فایل retry.sh
پیادهسازی کنید. برای اطمینان نسبی از پاسختان میتوانید از تستهای نمونه مسئله استفاده کنید. برای این کار کافیست از طریق دکمه «اجرای تست نمونه» پاسختان را برای کوئرا ارسال کنید.
توجه کنید
- فراموش نکنید که اسکریپتی کامل را در پاسختان تحویل دهید.
- فراموش نکنید که اسکریپت خود را درون فایلی با نام
retry.sh
وارد نمایید. - برای ارسال پاسخ خود کافیست فایل
retry.sh
را آپلود کنید. - در نظر داشته باشید که تا وقتی در جواب استاتوس کد
200
دریافت نکردهاید باید به ریکوئست زدن ادامه دهید. - همچنین پاسخ ارسالی شما باید به محض دریافت استاتوسکد
200
و چاپ خروجی خواسته شده به کار خود پایان دهد و هیچ ریکوئست دیگری به سرور ارسال نکند.
ارسال پاسخ برای این سؤال