Как работать с HTTP в Python?

Ответ

В Python для работы с HTTP чаще всего используются библиотеки requests и http.client.

requests — высокоуровневая библиотека, предпочтительная для большинства задач благодаря своей простоте и богатому функционалу (автоматическая обработка сессий, редиректов, кодировок).

Пример GET-запроса через requests:

import requests

# Выполнение GET-запроса к API
response = requests.get('https://api.example.com/data')

# Проверка статуса ответа и обработка данных
if response.status_code == 200:
    data = response.json() # Парсинг JSON-ответа
    print(data)
else:
    print(f"Ошибка: {response.status_code} - {response.text}")

Пример POST-запроса:

import requests

payload = {'key': 'value', 'another_key': 123}
# Отправка POST-запроса с JSON-данными
response = requests.post('https://api.example.com/submit', json=payload)
print(f"Статус ответа: {response.status_code}")
print(f"Тело ответа: {response.text}")

http.client — низкоуровневая библиотека, входящая в стандартную библиотеку Python, подходит для более детального контроля над HTTP-запросами, но требует больше кода.

Ключевые аспекты работы с HTTP в Python:

  • Обработка ошибок: Важно обрабатывать различные статусы HTTP (4xx, 5xx), таймауты и сетевые ошибки.
  • Сессии: Использование requests.Session() позволяет сохранять состояние между запросами (куки, заголовки) и повторно использовать TCP-соединения для повышения производительности.
  • Асинхронные запросы: Для высоконагруженных приложений и параллельной обработки запросов используются библиотеки вроде aiohttp.
  • Веб-скрейпинг: Для парсинга HTML-страниц часто применяются BeautifulSoup в сочетании с requests.
  • Безопасность: Работа с HTTPS, проверка SSL-сертификатов.

Ответ 18+ 🔞

А, ну так, слушай, про HTTP в Python, да? Тут, блядь, как в жизни — можно пойти по простому пути, а можно накрутить себе жопы, как последнему идиоту.

Вот смотри, есть два главных героя в этой истории. Первый — это requests. Это как твой заботливый дед, который всё за тебя сделает: и супчик подогреет, и носки связать поможет. Библиотека высочайшего, блядь, уровня, проще некуда. Хочешь что-то получить из интернета? Пожалуйста!

import requests

# Тыкаешь пальцем в API, и оно тебе отвечает
response = requests.get('https://api.example.com/data')

# А дальше магия, ёпта!
if response.status_code == 200:
    data = response.json() # Бац, и JSON уже у тебя в кармане!
    print(data)
else:
    print(f"Ошибка: {response.status_code} - {response.text}") # А если не повезло — узнаешь, в чём конкретно обосрался.

А если тебе надо не просто взять, а сунуть? Тоже элементарно, ядрёна вошь!

import requests

# Наготовил тут данных, как на тарелке
payload = {'key': 'value', 'another_key': 123}
# И — толчок! Отправляем.
response = requests.post('https://api.example.com/submit', json=payload)
print(f"Статус ответа: {response.status_code}")
print(f"Тело ответа: {response.text}")

Всё! Никакой хуйни. Сессии, редиректы, кодировки — всё само, как по маслу. Жить, блядь, и радоваться.

А теперь второй путь — http.client. Это уже не дедушка, а строгий отец-сапёр из девяностых. Всё низкоуровневое, в стандартной библиотеке, но если накосячишь — взорвёшься на ровном месте. Контроль полный, но и кода — овердохуища. Нужен он, когда тебе надо ковыряться в самых потрохах протокола, а не просто слать запросы.

Итак, на что смотреть, чтобы не облажаться:

  • Обработка ошибок: Не думай, что мир идеален. Сервер может ответить «пошёл нахуй» (4xx) или «я сам обосрался» (5xx). Сети могут отвалиться. Таймауты могут прийти. Лови это всё, а не делай вид, что всё летает.
  • Сессии (requests.Session()): Это как завести себе постоянного курьера. Он запомнит, какие куки ты ему дал, какие шапки надел, и будет ходить по одним и тем же тропинкам (TCP-соединениям), что быстрее и удобнее.
  • Асинхронность: Если тебе надо долбить сто пятьсот запросов одновременно и не ждать, пока один упырь доползёт, то requests уже не катит. Тут в бой идёт aiohttp — быстрый, асинхронный зверь. Но это уже другая, ебать, история.
  • Веб-скрейпинг: Хочешь шариться по сайтам и выковыривать оттуда данные? requests принесёт тебе HTML, а BeautifulSoup его разжуёт и выплюнет нужные кусочки. Симбиоз, блядь, идеальный.
  • Безопасность: HTTPS, SSL-сертификаты… В requests по умолчанию всё норм, он проверяет, что ты общаешься не с левым мудаком. Но если надо отключить проверку (на свой страх и риск, пидарас шерстяной) — можно, но лучше не надо.

Короче, для 95% дел бери requests и не парься. А если захочется экзотики и боли — welcome в мир http.client. Выбор за тобой, чувак.