Каждый HTTP-запрос несёт метаданные вместе с телом: это заголовки. Они сообщают серверу такие вещи: какой формат ответа вы ожидаете, кто вы и как интерпретировать тело запроса.
Чтобы отправить собственные заголовки через requests, передайте dict как аргумент headers:
```python
import requests
BASE_URL = 'https://apilearn.tukas.dev'
headers = {
'Accept': 'application/json',
'User-Agent': 'MyScript/1.0',
}
response = requests.get(f'{BASE_URL}/api/products/', headers=headers)
```
Несколько часто встречающихся заголовков:
- User-Agent — идентифицирует ваш клиент. Серверы иногда логируют это или блокируют неизвестных агентов. requests отправляет по умолчанию что-то вроде 'python-requests/2.x.x'.
- Accept — сообщает серверу, какой формат вы хотите получить. Для JSON API это обычно 'application/json', хотя сервер часто игнорирует это и возвращает JSON независимо от значения.
- Content-Type — описывает формат тела, которое вы отправляете (для POST/PUT/PATCH). requests устанавливает это автоматически при использовании json=.
- Authorization — передаёт учётные данные для аутентификации. Рассматривается в темах об авторизации.
Вы также можете читать заголовки, отправленные сервером в ответе:
```python
response = requests.get(f'{BASE_URL}/api/products/')
print(response.headers['Content-Type']) # application/json
print(response.headers.get('X-Custom', '')) # '' если нет
```
response.headers нечувствителен к регистру — 'content-type' и 'Content-Type' возвращают одинаковое значение.
Эндпоинт echo отражает ваш запрос в виде JSON. Он предназначен для отладки — вы можете увидеть именно то, что получил сервер:
```python
import requests
BASE_URL = 'https://apilearn.tukas.dev'
response = requests.get(f'{BASE_URL}/api/echo/')
print(response.json())
```
Ответ содержит метод, путь, заголовки и тело, которые получил сервер. Теперь добавьте собственный заголовок и посмотрите, как он появится:
```python
headers = {'X-My-Header': 'hello', 'User-Agent': 'MyBot/1.0'}
response = requests.get(f'{BASE_URL}/api/echo/', headers=headers)
data = response.json()
print(data['headers']['X-My-Header']) # 'hello'
print(data['headers']['User-Agent']) # 'MyBot/1.0'
```
Отправьте POST с JSON-телом и проверьте его:
```python
payload = {'action': 'test', 'value': 42}
response = requests.post(f'{BASE_URL}/api/echo/', json=payload)
data = response.json()
print(data['method']) # 'POST'
print(data['body']) # пейлоад, который вы отправили
```
При использовании json= requests автоматически устанавливает Content-Type в application/json и сериализует dict. Это можно подтвердить через echo:
```python
print(data['headers']['Content-Type']) # application/json
```
Эндпоинт echo также принимает произвольные пути, что удобно для тестирования поведения разных форм URL:
```python
response = requests.get(f'{BASE_URL}/api/echo/debug/anything/you/want/')
print(response.json()['path']) # '/api/echo/debug/anything/you/want/'
```
Отправьте GET к /api/echo/ с собственным заголовком X-Client-Name со значением "my-script". Подтвердите, что он появился в ответе echo, выведя его значение из ответа.
import requests
BASE_URL = 'https://apilearn.tukas.dev'
# Добавьте заголовок X-Client-Name и проверьте его в ответе echo
Выполните GET /api/products/ и выведите Content-Type и любой заголовок, содержащий "Allow" в названии. Если "Allow" отсутствует — выведите "Не найдено".
Мы используем необходимые cookies для работы сайта. С вашего разрешения мы также можем сохранять настройки сайта и использовать аналитические и рекламные cookies, чтобы понимать использование сайта и поддерживать развитие проекта.
* Вы всегда можете изменить свой выбор в настройках сайта.
Выберите категории cookies
Настройки аналитики
Можно отключить аналитику использования платформы. Также можно отправить в Google Analytics запрос на удаление данных об использовании этого сайта, связанных с этим браузером.
Учебный workspace
Учитесь, читая, запуская код и решая задачи.
Практикуйте программирование с пояснениями тем, упражнениями, инструментами browser IDE, проверкой regex и тренировкой печати кода в одном workspace.
Открывайте инструменты во вкладках.Упражнения, IDE-инструменты и тренажеры остаются доступными как вкладки сайта.
Переключайтесь без потери контекста.Переходите между пояснениями, кодом и утилитами, сохраняя свое место.
Используйте sidebar как карту.Левые панели содержат навигацию, настройки, файлы, libraries и управление инструментами.
PythonJavaScriptSQLite
Одна IDE, три практичных режима
Python в браузере.Запускайте небольшие скрипты, пробуйте библиотеки и тренируйте API-запросы без установки.
JavaScript для быстрых экспериментов.Проверяйте код для браузера и сравнивайте идеи рядом с учебными материалами.
SQLite для практики с данными.Открывайте обозреватель базы данных, изучайте таблицы, пишите запросы и учитесь SQL локально.
ТемаIDE
Работайте рядом в split tabs
Держите инструкции перед глазами.Откройте упражнение или справочную страницу рядом с IDE, вместо постоянных переключений.
Сравнивайте инструменты во время обучения.Размещайте проверки regex, пояснения и эксперименты с кодом рядом, когда это нужно для задачи.
Закройте split, когда закончите.Workspace вернётся к одной сфокусированной вкладке, а открытые вкладки сайта останутся доступны.
Тренажер слепой печати кода
Или просто текста
Тренажер рассчитан на физическую клавиатуру.Откройте этот раздел на ноутбуке или компьютере с широким экраном. На телефоне тренировка слепой печати не будет корректной.
Скорость: 0 зн/мин
0 слов/мин
Лучшая скорость (60с): 0 зн/мин
0 слов/мин
Ошибки: 0
Общее время: 0.0 с
Для активации режима слепого набора не подсматривайте на физическую клавиатуру.