HTTP-запросы с requests и httpx
Загружайте веб-страницы и обрабатывайте перенаправления, сеансы и заголовки.
«HTTP-запросы с requests и httpx» — бесплатный урок Python Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Библиотека requests
requests — стандартная синхронная библиотека для работы с HTTP. Она проста, проверена временем и отлично подходит для скриптов и разовых вызовов API.
# pip install requests
import requests
r = requests.get("https://api.github.com/users/octocat")
print(r.status_code) # 200
print(r.json()["login"]) # octocatПараметры запроса и заголовки
Передавайте параметры запроса с помощью params=, а пользовательские заголовки — с помощью headers=.
import requests
r = requests.get(
"https://api.example.com/search",
params={"q": "python", "page": 1},
headers={"Authorization": "Bearer my-token"}
)
print(r.url) # full URL with query stringPOST с телом JSON
Отправляйте данные JSON с помощью json= — requests автоматически устанавливает заголовок Content-Type: application/json.
import requests
r = requests.post(
"https://api.example.com/users",
json={"name": "Alice", "email": "alice@example.com"}
)
print(r.status_code) # 201
print(r.json())Объекты сессии
Используйте requests.Session, чтобы сохранять заголовки и файлы cookie, а также повторно использовать соединения в нескольких запросах.
import requests
with requests.Session() as s:
s.headers.update({"Authorization": "Bearer token"})
users = s.get("https://api.example.com/users").json()
profile = s.get("https://api.example.com/me").json()Время ожидания и повторные попытки
Всегда устанавливайте время ожидания. Используйте urllib3.util.retry.Retry вместе с HTTPAdapter для автоматических повторных попыток.
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
s = requests.Session()
retry = Retry(total=3, backoff_factor=1)
s.mount("https://", HTTPAdapter(max_retries=retry))
r = s.get("https://api.example.com/data", timeout=5)Обработка ошибок
Вызывайте r.raise_for_status(), чтобы для ответов 4xx/5xx возникало исключение HTTPError.
import requests
try:
r = requests.get("https://api.example.com/data")
r.raise_for_status()
data = r.json()
except requests.HTTPError as e:
print(f"HTTP error: {e.response.status_code}")
except requests.ConnectionError:
print("Network unreachable")Загрузка файлов
Загружайте большие файлы потоково с помощью stream=True, чтобы не загружать всё содержимое в память.
import requests
with requests.get("https://example.com/large.zip", stream=True) as r:
r.raise_for_status()
with open("large.zip", "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)httpx — современный асинхронный HTTP
У httpx такой же API, как у requests, но библиотека поддерживает асинхронность. Используйте её в приложениях FastAPI и асинхронных сценариях.
# pip install httpx
import httpx
# Synchronous:
r = httpx.get("https://httpbin.org/get")
print(r.json())
# Asynchronous:
import asyncio
async def main():
async with httpx.AsyncClient() as c:
r = await c.get("https://httpbin.org/get")
print(r.json())
asyncio.run(main())AsyncClient в httpx
Используйте один объект AsyncClient для нескольких запросов, чтобы повторно использовать соединения. Создавайте его при запуске, а закрывайте при завершении.
import httpx, asyncio
CLIENT: httpx.AsyncClient | None = None
async def startup():
global CLIENT
CLIENT = httpx.AsyncClient(timeout=10)
async def shutdown():
await CLIENT.aclose()Помощники для аутентификации
И requests, и httpx поддерживают помощники аутентификации: auth=(user, pass) для базовой аутентификации и пользовательские классы Auth для аутентификации по токену.
import httpx
class BearerAuth(httpx.Auth):
def __init__(self, token): self.token = token
def auth_flow(self, request):
request.headers["Authorization"] = f"Bearer {self.token}"
yield request
async with httpx.AsyncClient(auth=BearerAuth("my-token")) as c:
r = await c.get("https://api.example.com/me")Имитация HTTP в тестах
Используйте respx для httpx или responses для requests, чтобы имитировать HTTP-вызовы в тестах.
# pip install respx
import httpx, respx, asyncio
@respx.mock
async def test_api():
respx.get("https://api.example.com/users").mock(
return_value=httpx.Response(200, json=[{"id":1}])
)
async with httpx.AsyncClient() as c:
r = await c.get("https://api.example.com/users")
assert r.json() == [{"id": 1}]Быстрая проверка
Что делает response.raise_for_status()?
Итоги
Используйте requests для синхронной работы с HTTP. Выбирайте httpx, когда нужна асинхронность. Всегда устанавливайте время ожидания, используйте сессии для повторного использования соединений, вызывайте raise_for_status() и загружайте большие файлы потоково. Имитируйте HTTP в тестах с помощью respx или responses.
Часто задаваемые вопросы
Урок «HTTP-запросы с requests и httpx» бесплатный?
Да — полный текст урока «HTTP-запросы с requests и httpx» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «HTTP-запросы с requests и httpx»?
Загружайте веб-страницы и обрабатывайте перенаправления, сеансы и заголовки. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «HTTP-запросы с requests и httpx»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- HTTP-запросы с requests и httpx
- Разбор HTML с помощью BeautifulSoup
- Создание паука Scrapy
- Обработка JavaScript и мер против парсинга