Python · API · Начальный уровень
Перенаправления
Разберитесь с HTTP-перенаправлениями, проверяйте цепочки редиректов и управляйте их обработкой.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Работа с перенаправлениями на практике
#Справочник перенаправлений
#Упражнения:
Следовать за перенаправлением
#Отправьте GET-запрос к /api/redirect/ (со стандартным следованием за перенаправлениями). Выведите финальный код статуса и URL, на котором вы оказались.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Следуйте за перенаправлением и выведите status_code и финальный URL
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
response = requests.get(f'{BASE_URL}/api/redirect/')
print(response.status_code)
print(response.url)
Увидеть само перенаправление
#Отправьте GET к /api/redirect/ с allow_redirects=False. Выведите код статуса и заголовок Location.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Отключите следование за перенаправлениями и проверьте ответ
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
response = requests.get(f'{BASE_URL}/api/redirect/', allow_redirects=False)
print(response.status_code)
print(response.headers['Location'])
Обзор истории перенаправлений
#Отправьте GET к /api/redirect/ и выведите все промежуточные ответы из response.history. Для каждого выведите код статуса и URL. Затем выведите финальные код статуса и URL.
import requests
BASE_URL = 'https://apilearn.tukas.dev'
response = requests.get(f'{BASE_URL}/api/redirect/')
# Выведите каждый переход в response.history, затем финальный ответ
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
response = requests.get(f'{BASE_URL}/api/redirect/')
for hop in response.history:
print(hop.status_code, hop.url)
print(response.status_code, response.url)
Подсчитать переходы в цепочке
#Отправьте GET к /api/redirect/chain/5/ и выведите количество перенаправлений. Затем выведите URL каждого перехода в цепочке.
import requests
BASE_URL = 'https://apilearn.tukas.dev'
response = requests.get(f'{BASE_URL}/api/redirect/chain/5/')
# Выведите количество переходов и каждый URL в цепочке
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
response = requests.get(f'{BASE_URL}/api/redirect/chain/5/')
print(f'Переходов: {len(response.history)}')
for hop in response.history:
print(hop.url)
Сравнить типы перенаправлений
#Сравните /api/redirect/ и /api/redirect/permanent/ рядом. Для каждого используйте allow_redirects=False и выведите код статуса.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Проверьте коды статуса обоих типов перенаправлений без следования
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
r_temp = requests.get(f'{BASE_URL}/api/redirect/', allow_redirects=False)
r_perm = requests.get(f'{BASE_URL}/api/redirect/permanent/', allow_redirects=False)
print(f'/api/redirect/ → {r_temp.status_code}')
print(f'/api/redirect/permanent/ → {r_perm.status_code}')