به عنوان تمرین دوم، *سلیب* و *علیرضا* و *عرشیا* میخواهند یک مشکل از مشکلاتی که در ایران بسیار با آن مواجه میشوند را برای همیشه حل کنند.
آنها همواره در تلاش برای برقراری ارتباط با وبسایتی هستند که به خاطر حجم زیاد درخواستها توان پاسخگویی ندارد.
برای رفع این مشکل به صورت ابدی، سلیب یک سرور درون آدرسی بالا میآورد که یک ویژگی منحصر به فرد دارد. اگر به این سرور هرگونه ریکوئستی از نوع `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` به سرور مورد نظر ما، پاسخی مطابق زیر دریافت میشود:
```
[<mark class="yellow" title="در این قسمت استاتوس کد سرور قرار داده شود."><STATUS_CODE></mark>]
```
برای مثال اگر درخواست ما با استاتوسکد `404` مواجه شود، سرور پاسخ زیر را برای ما ارسال میکند:
```
[404]
```
اسکریپت ارسالی شما باید پاسخ هر ریکوئست را در قالب زیر در ترمینال چاپ کند:
```
ret is: [<mark class="yellow" title="در این قسمت باید استاتوس کد دریافتی از سرور قرار داده شود."><STATUS_CODE></mark>]
```
برای مثال اگر سرور به ما پاسخی با استاتوسکد `404` داد، باید خروجی زیر نمایش داده شود:
```
ret is: [404]
```
## مثال
برای مثال اگر اسکریپت شما را مانند زیر اجرا کنیم:
```bash
./retry.sh <mark class="red" title="در این قسمت آدرس سرور مورد نظر ما قرار میگیرد."><SERVER_ADDRESS></mark>
```
باید خروجی زیر را دهد:
```
ret is: [403]
ret is: [500]
ret is: [403]
ret is: [400]
ret is: [404]
ret is: [404]
ret is: [200]
```
+ **به محض دریافت ریکوئستی با استاتوسکد `200`، دیگر ریکوئستی ارسال نمیشود و برنامه به کار خود خاتمه میدهد.**
## پروژه اولیه
برای دریافت پروژه اولیه [این لینک](/problemset/assignments/4367/download_problem_initial_project/129781/) را دانلود کنید. درون لینک ساختار فایلی زیر را مشاهده میکنید:
```
Dobare_Talash_Kon
└── retry.sh
```
راهحل خود را درون فایل `retry.sh` پیادهسازی کنید. برای اطمینان نسبی از پاسختان میتوانید از تستهای نمونه مسئله استفاده کنید. برای این کار کافیست از طریق دکمه «اجرای تست نمونه» پاسختان را برای کوئرا ارسال کنید.
## توجه کنید
+ فراموش نکنید که اسکریپتی کامل را در پاسختان تحویل دهید.
+ فراموش نکنید که اسکریپت خود را درون فایلی با نام `retry.sh` وارد نمایید.
+ برای ارسال پاسخ خود کافیست فایل `retry.sh` را آپلود کنید.
+ در نظر داشته باشید که تا وقتی در جواب استاتوس کد `200` دریافت نکردهاید باید به ریکوئست زدن ادامه دهید.
+ همچنین پاسخ ارسالی شما باید **به محض** دریافت استاتوسکد `200` و چاپ خروجی خواسته شده به کار خود پایان دهد و **هیچ ریکوئست دیگری به سرور ارسال نکند.**