Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
POST запрос в HTTP
POST — это HTTP метод, который используется для отправки данных на сервер с целью создания нового ресурса или обработки информации. В отличие от GET, POST может передавать большое количество данных и не кэшируется браузером.
Различие между GET и POST
GET запрос:
- Получает данные с сервера
- Данные в URL (ограничение 2000-4000 символов)
- Кэшируется
- Видна вся информация в адресной строке
- Используется для извлечения (безопасен)
POST запрос:
- Отправляет данные на сервер
- Данные в теле запроса (неограниченно)
- Не кэшируется
- Данные скрыты в теле
- Используется для создания, обновления (изменяет состояние)
import requests
# GET — получить список пользователей
response = requests.get('https://api.example.com/users')
print(response.json())
# POST — создать нового пользователя
data = {
'name': 'Alice',
'email': 'alice@example.com',
'age': 30
}
response = requests.post('https://api.example.com/users', json=data)
print(response.json()) # Возвращает созданного пользователя с ID
Зачем нужен POST
1. Создание новых ресурсов:
# Создание нового поста в блоге
post_data = {
'title': 'My First Post',
'content': 'This is the content...',
'author': 'Alice'
}
response = requests.post('https://api.example.com/posts', json=post_data)
print(response.json()) # {"id": 123, "title": "My First Post", ...}
2. Отправка форм:
# Форма регистрации
form_data = {
'username': 'alice_smith',
'password': 'secure_password',
'email': 'alice@example.com'
}
response = requests.post('https://api.example.com/register', json=form_data)
3. Обновление ресурсов (некоторые системы):
# Обновление профиля пользователя
update_data = {
'name': 'Alice Johnson',
'bio': 'Software Developer'
}
response = requests.post(f'https://api.example.com/users/123/update', json=update_data)
4. Проверка данных и обработка:
# Проверка кредитной карты
payment_data = {
'card_number': '4111111111111111',
'cvv': '123',
'amount': 99.99
}
response = requests.post('https://api.example.com/process-payment', json=payment_data)
Структура POST запроса
POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 56
{"name": "Alice", "email": "alice@example.com", "age": 30}
- Метод: POST
- Путь: /api/users
- Заголовки: Content-Type, Content-Length и др.
- Тело: JSON данные
Content-Type в POST
JSON (самый распространённый):
response = requests.post(
'https://api.example.com/users',
json={'name': 'Alice', 'email': 'alice@example.com'} # Автоматически Content-Type: application/json
)
Form Data (HTML формы):
response = requests.post(
'https://api.example.com/login',
data={'username': 'alice', 'password': 'pass123'} # Content-Type: application/x-www-form-urlencoded
)
Multipart (загрузка файлов):
files = {'file': open('image.jpg', 'rb')}
response = requests.post(
'https://api.example.com/upload',
files=files # Content-Type: multipart/form-data
)
REST API и POST
В REST архитектуре используются разные HTTP методы:
# GET /api/users — получить всех пользователей
response = requests.get('https://api.example.com/users')
# GET /api/users/123 — получить пользователя с ID 123
response = requests.get('https://api.example.com/users/123')
# POST /api/users — создать нового пользователя
response = requests.post('https://api.example.com/users', json={'name': 'Alice'})
# PUT /api/users/123 — полное обновление пользователя
response = requests.put('https://api.example.com/users/123', json={'name': 'Bob'})
# PATCH /api/users/123 — частичное обновление
response = requests.patch('https://api.example.com/users/123', json={'name': 'Bob'})
# DELETE /api/users/123 — удалить пользователя
response = requests.delete('https://api.example.com/users/123')
Пример с Flask (сервер)
from flask import Flask, request, jsonify
app = Flask(__name__)
# GET запрос
@app.route('/api/users', methods=['GET'])
def get_users():
return jsonify([{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}])
# POST запрос
@app.route('/api/users', methods=['POST'])
def create_user():
data = request.get_json() # Получаем данные из тела POST запроса
new_user = {
'id': 3,
'name': data['name'],
'email': data['email']
}
return jsonify(new_user), 201 # Возвращаем 201 Created
if __name__ == '__main__':
app.run()
Пример с Django
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
import json
@require_http_methods(["POST"])
def create_user(request):
data = json.loads(request.body)
# Обработка данных
new_user = {
'id': 3,
'name': data.get('name'),
'email': data.get('email')
}
return JsonResponse(new_user, status=201)
Пример с FastAPI (асинхронный)
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class UserCreate(BaseModel):
name: str
email: str
@app.post("/api/users")
async def create_user(user: UserCreate):
new_user = {
'id': 3,
'name': user.name,
'email': user.email
}
return new_user
Безопасность POST запросов
HTTPS обязателен:
# Плохо — данные передаются в открытом виде
response = requests.post('http://api.example.com/users', json=data)
# Хорошо — зашифрованное соединение
response = requests.post('https://api.example.com/users', json=data)
Валидация данных на сервере:
from pydantic import BaseModel, EmailStr, validator
class UserCreate(BaseModel):
name: str
email: EmailStr
age: int
@validator('age')
def age_must_be_positive(cls, v):
if v < 0:
raise ValueError('Age cannot be negative')
return v
Защита от CSRF:
# Django автоматически проверяет CSRF токен
# Flask также имеет встроенную защиту
from flask_wtf.csrf import protect
@app.route('/api/users', methods=['POST'])
@protect() # Проверка CSRF токена
def create_user():
pass
Статус коды для POST
# 201 Created — ресурс успешно создан
response = requests.post(url, json=data)
print(response.status_code) # 201
# 400 Bad Request — неверные данные
# 401 Unauthorized — требуется аутентификация
# 403 Forbidden — нет прав доступа
# 409 Conflict — ресурс уже существует
# 500 Internal Server Error — ошибка на сервере
Выводы
POST используется для:
- Создания новых ресурсов
- Отправки данных на сервер
- Обработки информации
- Обновления ресурсов
- Загрузки файлов
Отличия от GET:
- POST передаёт данные в теле, не в URL
- POST может передавать больше данных
- POST не кэшируется
- POST более безопасен для чувствительных данных
- POST изменяет состояние на сервере
POST — это фундаментальный HTTP метод для работы с веб-приложениями и API.