0Pricing
Python Academy · Урок

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 string

POST с телом 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 — локальная установка не требуется.

Все уроки этого курса

  1. HTTP-запросы с requests и httpx
  2. Разбор HTML с помощью BeautifulSoup
  3. Создание паука Scrapy
  4. Обработка JavaScript и мер против парсинга
← Назад к Python Academy