HTTP Status Kodlari va Python-da Ularni Qayta Ishlash
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:
1xx (Informatsion javoblar) – Jarayon davom etmoqda.
2xx (Muvaffaqiyat) – So‘rov muvaffaqiyatli bajarildi.
3xx (Yo‘naltirish) – So‘rov boshqa manzilga yo‘naltirilmoqda.
4xx (Mijoz xatosi) – So‘rov noto‘g‘ri yoki bajarilishi mumkin emas.
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:
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