Кожен 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
Надішліть POST до /api/echo/ з JSON-тілом, що містить ключі "name" і "value". Виведіть поля method і body з відповіді echo.
import requests
BASE_URL = 'https://apilearn.tukas.dev'
payload = {'name': 'test', 'value': 99}
# POST до /api/echo/ і виведіть method і body з відповіді
Зробіть 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 с
Щоб тренувати сліпий друк, не підглядайте на фізичну клавіатуру.