Как отправить HTTP-запрос с requests

онлайн тренажер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Как отправить HTTP-запрос с requests: Полное руководство с примерами

Работа с веб-ресурсами — неотъемлемая часть современного программирования. Будь то получение данных с API, парсинг сайтов или автоматизация различных задач, в Python для этого широко используется библиотека requests.

Эта библиотека обеспечивает простой и удобный способ отправки HTTP-запросов всех типов (GET, POST, PUT, DELETE и других).

В этом руководстве мы подробно разберём, как отправлять HTTP-запросы с помощью requests, правильно работать с параметрами, заголовками и JSON-данными, а также обрабатывать возможные ошибки.


📌 Что такое requests и зачем она нужна?

requests — это внешняя библиотека Python, которая позволяет легко отправлять HTTP-запросы и обрабатывать ответы.

Основные преимущества requests:

  • Простота в использовании.

  • Поддержка всех методов HTTP.

  • Работа с JSON, Cookies, Headers.

  • Обработка ошибок и исключений.

  • Возможность настройки прокси и тайм-аутов.


📚 Установка библиотеки requests

Если библиотека не установлена, выполните в терминале команду:

bash
pip install requests

📖 Основные типы HTTP-запросов с примерами

1. GET-запрос

GET-запрос используется для получения данных с сервера.

python
import requests response = requests.get('https://api.github.com') print(response.status_code) # 200 print(response.text) # Содержимое ответа

📌 Передача параметров в GET-запросе

python
params = {'q': 'python', 'page': 2} response = requests.get('https://api.github.com/search/repositories', params=params) print(response.url) # Проверяем итоговый URL

2. POST-запрос

POST-запрос используется для отправки данных на сервер.

python
data = {'username': 'test', 'password': '12345'} response = requests.post('https://httpbin.org/post', data=data) print(response.json())

📌 POST-запрос с JSON-данными

python
json_data = {'title': 'New Post', 'body': 'Content', 'userId': 1} response = requests.post('https://jsonplaceholder.typicode.com/posts', json=json_data) print(response.json())

3. PUT-запрос

Используется для обновления существующих данных.

python
update_data = {'title': 'Updated Title'} response = requests.put('https://jsonplaceholder.typicode.com/posts/1', json=update_data) print(response.status_code) # 200

4. DELETE-запрос

Удаляет данные на сервере.

python
response = requests.delete('https://jsonplaceholder.typicode.com/posts/1') print(response.status_code) # 200

📚 Работа с заголовками (Headers)

Иногда при отправке запросов требуется указать специальные заголовки, например, для авторизации или указания типа контента.

python
headers = {'Authorization': 'Bearer YOUR_API_TOKEN', 'Content-Type': 'application/json'} response = requests.get('https://api.example.com/data', headers=headers) print(response.status_code)

📚 Работа с Cookies

python
response = requests.get('https://httpbin.org/cookies', cookies={'session_id': '123456'}) print(response.text)

📚 Обработка JSON-ответов

python
response = requests.get('https://jsonplaceholder.typicode.com/posts') data = response.json() print(data[0]) # Первый элемент в полученном списке

📚 Обработка ошибок и исключений

Работа с сетевыми запросами всегда сопряжена с риском ошибок. Используйте конструкции try-except для обработки исключений.

python
try: response = requests.get('https://api.github.com', timeout=5) response.raise_for_status() # Проверка статуса ответа except requests.exceptions.HTTPError as errh: print("HTTP Error:", errh) except requests.exceptions.ConnectionError as errc: print("Connection Error:", errc) except requests.exceptions.Timeout as errt: print("Timeout Error:", errt) except requests.exceptions.RequestException as err: print("Other Error:", err)

📚 Настройка тайм-аутов

Тайм-ауты помогают избежать «вечного» ожидания ответа от сервера.

python
response = requests.get('https://api.github.com', timeout=3)

📚 Работа с сессиями

Если вам нужно отправлять несколько запросов с сохранением сессионных данных (например, cookies), используйте объект Session.

python
session = requests.Session() session.headers.update({'User-Agent': 'MyApp/1.0'}) response = session.get('https://httpbin.org/get') print(response.text)

📚 Отправка файлов

python
files = {'file': open('test.txt', 'rb')} response = requests.post('https://httpbin.org/post', files=files) print(response.json())

📚 Использование прокси

python
proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', } response = requests.get('https://api.github.com', proxies=proxies)

📚 FAQ — Часто задаваемые вопросы

1. Как проверить, был ли запрос успешным?

python
if response.ok: print("Успешный запрос!") else: print(f"Ошибка: {response.status_code}")

2. Как узнать, какой финальный URL после редиректа?

python
print(response.url)

3. Можно ли отключить SSL-проверку сертификата?

python
response = requests.get('https://self-signed.badssl.com/', verify=False)

⚠️ Не рекомендуется отключать SSL-проверку в продакшене!


4. Как ограничить количество редиректов?

python
response = requests.get('https://example.com', allow_redirects=False)

5. Как добавить параметры в строку запроса вручную?

python
url = 'https://api.example.com/data?param1=value1&param2=value2' response = requests.get(url)

6. Можно ли использовать requests для REST API?

Да! Это одна из самых популярных задач для библиотеки requests.


Заключение

Библиотека requests — это мощный инструмент для работы с HTTP-запросами в Python. Её простота и богатый функционал делают её незаменимой как для новичков, так и для опытных разработчиков.

Зная, как отправлять различные типы HTTP-запросов, обрабатывать ошибки, работать с JSON и сессиями, вы сможете интегрировать внешние API в свои проекты и автоматизировать рутинные задачи.

Новости