HTTP Status Kodlari va Python-da Ularni Qayta Ishlash

Ushbu qo‘llanma HTTP/HTTPS so‘rovlariga ishlov berishni tushuntiradi. U GitBook uchun moslashtirilgan bo‘lib, HTTP status kodlarini boshqarish va qayta ishlash uchun Python kutubxonalaridan qanday foydalanish mumkinligini qamrab oladi.

1 HTTP Status Kodlariga Kirish

HTTP status kodlari – bu HTTP protokoli orqali serverdan qaytariladigan javoblarning holatini ko'rsatadi. Kodlar uch xonali bo‘lib, birinchi raqami ularning turini bildiradi:

  1. 1xx (Informatsion javoblar) – Jarayon davom etmoqda.

  2. 2xx (Muvaffaqiyat) – So‘rov muvaffaqiyatli bajarildi.

  3. 3xx (Yo‘naltirish) – So‘rov boshqa manzilga yo‘naltirilmoqda.

  4. 4xx (Mijoz xatosi) – So‘rov noto‘g‘ri yoki bajarilishi mumkin emas.

  5. 5xx (Server xatosi) – Server so‘rovni qayta ishlay olmadi.

Har bir kodning o‘ziga xos ma'nosi bor va ularni Python yordamida qayta ishlash uchun requests kutubxonasidan foydalanishimiz mumkin.

2. Python’da HTTP Status Kodlarini Qayta Ishlash

Talab qilinadigan kutubxona: requests

Avval requests kutubxonasini o‘rnatish kerak bo‘ladi. Agar hali o‘rnatilmagan bo‘lsa:

pip install requests

2 Muvaffaqiyatli So‘rov va 2xx Kodlarini Qayta Ishlash

2xx Kodlarining Ma’nosi

  • 200 OK – So‘rov muvaffaqiyatli bajarildi.

  • 201 Created – Yaratish so‘rovi muvaffaqiyatli bajarildi va yangi resurs yaratildi.

Amaliyot

Quyidagi kodda oddiy GET so‘rovi yuboriladi va 200 OK status kodiga ishlov beriladi:

import requests

url = "https://jsonplaceholder.typicode.com/posts/1"
response = requests.get(url)

if response.status_code == 200:
    print("Muvaffaqiyatli so‘rov. Ma’lumotlar:", response.json())
elif response.status_code == 201:
    print("Yangi resurs yaratildi.")
else:
    print("Kutilmagan holat:", response.status_code)

Yo‘naltirishlar va 3xx Kodlarini Qayta Ishlash

3xx Kodlarining Ma’nosi

  • 301 Moved Permanently – Resurs doimiy ravishda boshqa manzilga ko‘chirilgan.

  • 302 Found – Resurs vaqtincha boshqa manzilga ko‘chirilgan.

Amaliyot

Python’da yo‘naltirishlar avtomatik ravishda bajariladi. Quyidagi kod yo‘naltirishga ishlov berishni ko‘rsatadi:

response = requests.get("http://github.com")
if 300 <= response.status_code < 400:
    print("Yo‘naltirish bajarildi:", response.url)

Xatolar va 4xx Kodlarini Qayta Ishlash

4xx Kodlarining Ma’nosi

  • 400 Bad Request – So‘rov noto‘g‘ri tuzilgan.

  • 401 Unauthorized – Kirish uchun autentifikatsiya kerak.

  • 404 Not Found – So‘rov qilinayotgan resurs topilmadi.

Amaliyot

Ushbu kodda 404 Not Found va boshqa xatolarni aniqlash ko‘rsatilgan:

url = "https://jsonplaceholder.typicode.com/invalid-url"
response = requests.get(url)

if response.status_code == 404:
    print("Resurs topilmadi. Iltimos, URLni tekshiring.")
elif response.status_code == 401:
    print("Avtorizatsiya talab etiladi.")
elif 400 <= response.status_code < 500:
    print("Mijoz xatosi:", response.status_code)

Server Xatolari va 5xx Kodlarini Qayta Ishlash

5xx Kodlarining Ma’nosi

  • 500 Internal Server Error – Serverda ichki xato yuz berdi.

  • 503 Service Unavailable – Server hozirda mavjud emas yoki band.

Amaliyot

Quyidagi kodda 5xx xatolariga ishlov berish ko‘rsatilgan:

url = "https://httpstat.us/500"
response = requests.get(url)

if response.status_code == 500:
    print("Serverda ichki xato.")
elif response.status_code == 503:
    print("Xizmat hozircha mavjud emas.")
elif 500 <= response.status_code < 600:
    print("Server xatosi:", response.status_code)

3 To‘liq Misol: HTTP Status Kodlari va Ularning Tahlili

Ushbu misolda barcha status kodlarini tahlil qilish uchun umumiy funksiya yaratiladi:

def check_status_code(url):
    try:
        response = requests.get(url)
        status = response.status_code

        if 200 <= status < 300:
            print("Muvaffaqiyatli javob:", response.json())
        elif 300 <= status < 400:
            print("Yo‘naltirish bajarildi. Yangi manzil:", response.url)
        elif 400 <= status < 500:
            print("Mijoz xatosi:", status)
        elif 500 <= status < 600:
            print("Server xatosi:", status)
        else:
            print("Kutilmagan javob:", status)
    except requests.exceptions.RequestException as e:
        print("So‘rov bajarilmadi:", e)

# Foydalanish
check_status_code("https://jsonplaceholder.typicode.com/posts/1")
check_status_code("https://jsonplaceholder.typicode.com/invalid-url")

4 Qo‘shimcha Maslahatlar

  • Timeoutlarni belgilash: Ba’zi holatlarda server javob bermaydi, shuning uchun timeout qo‘shish yaxshi fikr.

    response = requests.get(url, timeout=5)
  • Headerlarni ko‘rish: Javob headerlarini ko‘rib chiqish uchun response.headers dan foydalaning.

Quyidagi kod barcha yuqoridagi qismalarni bitta dasturda birlashtiradi. Bu dastur berilgan URL manzili bo‘yicha HTTP status kodlarini tekshiradi va ularga mos ravishda tegishli javobni qaytaradi.

import requests

def check_status_code(url):
    try:
        # URL manzilga so'rov yuboriladi
        response = requests.get(url, timeout=5)
        status = response.status_code

        # 2xx: Muvaffaqiyatli javoblar
        if 200 <= status < 300:
            if status == 200:
                print("200 OK: Muvaffaqiyatli so‘rov. Ma’lumotlar:", response.json())
            elif status == 201:
                print("201 Created: Yangi resurs yaratildi.")
            else:
                print(f"{status}: Muvaffaqiyatli javob.")

        # 3xx: Yo‘naltirishlar
        elif 300 <= status < 400:
            if status == 301:
                print("301 Moved Permanently: Resurs boshqa manzilga ko‘chirilgan.")
            elif status == 302:
                print("302 Found: Resurs vaqtincha boshqa manzilga ko‘chirilgan.")
            print("Yo‘naltirish bajarildi. Yangi manzil:", response.url)

        # 4xx: Mijoz xatolari
        elif 400 <= status < 500:
            if status == 400:
                print("400 Bad Request: So‘rov noto‘g‘ri tuzilgan.")
            elif status == 401:
                print("401 Unauthorized: Avtorizatsiya talab etiladi.")
            elif status == 404:
                print("404 Not Found: Resurs topilmadi. Iltimos, URLni tekshiring.")
            else:
                print(f"{status}: Mijoz xatosi.")

        # 5xx: Server xatolari
        elif 500 <= status < 600:
            if status == 500:
                print("500 Internal Server Error: Serverda ichki xato yuz berdi.")
            elif status == 503:
                print("503 Service Unavailable: Xizmat hozircha mavjud emas.")
            else:
                print(f"{status}: Server xatosi.")
        else:
            print(f"{status}: Kutilmagan javob kodi.")

    # So'rov bajarilmagan holat
    except requests.exceptions.RequestException as e:
        print("So‘rov bajarilmadi:", e)


# Sinov uchun URL manzillarini tekshirish
print("Sinov 1:")
check_status_code("https://jsonplaceholder.typicode.com/posts/1")

print("\nSinov 2:")
check_status_code("https://jsonplaceholder.typicode.com/invalid-url")

print("\nSinov 3:")
check_status_code("http://github.com")  # Yo'naltirish uchun sinov

print("\nSinov 4:")
check_status_code("https://httpstat.us/500")  # Server xatosi uchun sinov

Last updated