← Назад к вопросам

Что такое request?

2.0 Middle🔥 91 комментариев
#Python Core#Soft Skills

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Request (HTTP запрос)

Request — это сообщение, отправляемое клиентом на сервер через сетевой протокол (обычно HTTP/HTTPS), содержащее информацию о том, какую операцию нужно выполнить, какие данные нужны и в каком формате. Это один из двух компонентов HTTP взаимодействия, вторая часть — Response (ответ).

Структура HTTP Request

Каждый HTTP request состоит из четырёх частей:

┌─────────────────────────────────┐
│  1. Request Line (строка запроса) │
├─────────────────────────────────┤
│  2. Headers (заголовки)         │
├─────────────────────────────────┤
│  3. Empty line (пустая строка)  │
├─────────────────────────────────┤
│  4. Body (тело запроса)         │
└─────────────────────────────────┘

1. Request Line

METHOD PATH HTTP/VERSION
GET /api/v1/users HTTP/1.1

Структура:

  • METHOD — действие (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS)
  • PATH — путь ресурса на сервере
  • VERSION — версия HTTP (1.0, 1.1, 2.0, 3.0)

2. Headers (заголовки)

Host: example.com
User-Agent: Mozilla/5.0
Content-Type: application/json
Content-Length: 256
Authorization: Bearer token123
Cookie: session=abc123

Основные заголовки:

  • Host — адрес хоста, к которому обращаемся
  • User-Agent — браузер/приложение, которое отправило запрос
  • Content-Type — формат данных в теле запроса
  • Content-Length — размер тела запроса
  • Authorization — аутентификационные данные
  • Cookie — сессионные данные клиента
  • Accept — формат, который хочет получить клиент

3. Body (тело)

Содержит данные для отправки на сервер. Есть только для методов, которые отправляют данные:

{
  "name": "John Doe",
  "email": "john@example.com",
  "age": 30
}

Пример полного HTTP Request

POST /api/v1/users HTTP/1.1
Host: example.com
User-Agent: curl/7.64.1
Accept: application/json
Content-Type: application/json
Content-Length: 47
Authorization: Bearer eyJhbGc...

{"name": "John", "email": "john@example.com"}

HTTP методы

import requests

# GET — получить данные
response = requests.get("https://api.example.com/users")
print(response.json())

# POST — создать новый ресурс
response = requests.post(
    "https://api.example.com/users",
    json={"name": "John", "email": "john@example.com"}
)
print(response.status_code)

# PUT — полностью заменить ресурс
response = requests.put(
    "https://api.example.com/users/1",
    json={"name": "Jane", "email": "jane@example.com"}
)

# PATCH — частично изменить ресурс
response = requests.patch(
    "https://api.example.com/users/1",
    json={"name": "Jane"}  # Только имя
)

# DELETE — удалить ресурс
response = requests.delete("https://api.example.com/users/1")

# HEAD — как GET, но без тела ответа
response = requests.head("https://api.example.com/users")

# OPTIONS — получить доступные методы
response = requests.options("https://api.example.com/users")

Параметры запроса

# Query параметры (в URL)
response = requests.get(
    "https://api.example.com/users",
    params={"page": 1, "limit": 10, "sort": "name"}
)
# Результат: https://api.example.com/users?page=1&limit=10&sort=name

# Path параметры
response = requests.get(f"https://api.example.com/users/123")

# Заголовки
response = requests.get(
    "https://api.example.com/users",
    headers={
        "Authorization": "Bearer token123",
        "User-Agent": "MyApp/1.0"
    }
)

# Cookies
response = requests.get(
    "https://api.example.com/users",
    cookies={"session_id": "abc123def456"}
)

# Form data (Content-Type: application/x-www-form-urlencoded)
response = requests.post(
    "https://api.example.com/login",
    data={"username": "john", "password": "secret"}
)

# JSON (Content-Type: application/json)
response = requests.post(
    "https://api.example.com/users",
    json={"name": "John", "email": "john@example.com"}
)

# Files (multipart/form-data)
with open("photo.jpg", "rb") as f:
    response = requests.post(
        "https://api.example.com/upload",
        files={"image": f}
    )

Обработка Response

response = requests.get("https://api.example.com/users")

# Статус код
print(response.status_code)  # 200

# Заголовки ответа
print(response.headers["Content-Type"])  # application/json

# Тело ответа
print(response.text)        # Как строка
print(response.json())      # Как объект Python
print(response.content)     # Как байты

# Cookies из ответа
print(response.cookies)

# История редиректов
for resp in response.history:
    print(f"Редирект: {resp.status_code}")

Asynchronous requests

import aiohttp
import asyncio

async def fetch_users():
    async with aiohttp.ClientSession() as session:
        # GET
        async with session.get("https://api.example.com/users") as resp:
            data = await resp.json()
            print(data)
        
        # POST
        async with session.post(
            "https://api.example.com/users",
            json={"name": "John"}
        ) as resp:
            print(f"Created: {resp.status}")

asyncio.run(fetch_users())

Обработка ошибок

from requests.exceptions import (
    RequestException,
    ConnectionError,
    Timeout,
    HTTPError
)

try:
    response = requests.get(
        "https://api.example.com/users",
        timeout=5  # Timeout 5 секунд
    )
    response.raise_for_status()  # Выкинет исключение для 4xx/5xx
    data = response.json()
except Timeout:
    print("Запрос истёк по времени")
except ConnectionError:
    print("Ошибка подключения")
except HTTPError as e:
    print(f"HTTP ошибка: {e.response.status_code}")
except Exception as e:
    print(f"Ошибка: {e}")

Практическое применение

  • REST API клиенты — взаимодействие с внешними API
  • Web scraping — получение данных с веб-сайтов
  • Микросервисы — коммуникация между сервисами
  • Интеграции — подключение платёжных систем, соцсетей и т.п.
  • Webhooks — отправка данных на внешние endpoints

Request — это фундаментальная концепция веб-разработки, которая позволяет приложениям общаться друг с другом через интернет.

Что такое request? | PrepBro