Комментарии (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 — это фундаментальная концепция веб-разработки, которая позволяет приложениям общаться друг с другом через интернет.