Делаем HTTP запросы в Python с помощью Requests
Пакет Python Requests - это мощная и удобная в использовании библиотека для создания HTTP-запросов. Он позволяет абстрагироваться от сложностей создания запросов с помощью простого API, позволяя вам легко отправлять HTTP-запросы и обрабатывать ответы. В этой статье мы рассмотрим ключевые функции пакета Requests, способы его использования и некоторые распространенные варианты использования.
Введение в Requests
Requests - это сторонняя библиотека Python, которая значительно упрощает выполнение HTTP-запросов. Созданная Кеннетом Рейтцем, программа Requests разработана таким образом, чтобы быть максимально удобной для пользователя, предоставляя интуитивно понятный и простой API. С помощью Requests вы можете без особых усилий отправлять все типы HTTP-запросов, включая GET, POST, PUT, DELETE и другие. Кроме того, он поддерживает пользовательские заголовки, различные методы аутентификации и механизмы авторизации, такие как токены на предъявителя (JWT), что делает его универсальным инструментом для взаимодействия с веб-службами и API.
Установка
Чтобы установить пакет requests, используйте pip:
pip3 install requests
Для Windows и Mac как правило можно вызывать pip без указания версии.
Рассмотрим примеры использования библиотеки.
Отправка GET запроса
Самый простой запрос, который вы можете сделать, - это запрос GET. Он используется для извлечения данных из указанного ресурса.
import requests
response = requests.get('https://api.github.com')
print(response.status_code)
print(response.headers)
print(response.text)
В этом примере мы отправляем запрос GET к API GitHub. Атрибут status_code предоставляет HTTP-код статуса ответа, headers содержит заголовки ответа, а text - текстовую часть ответа.
Отправка Post-запроса
POST-запрос используется для отправки данных на сервер для создания или обновления ресурса.
import requests
response = requests.post('https://httpbin.org/post', data={'key': 'value'})
print(response.json())
Здесь мы отправляем данные словаря в httpbin.org, который представляет собой простую службу HTTP-запросов и ответов.
Обработка ответов
Ответы в формате JSON
Если сервер возвращает ответ в формате JSON, вы можете использовать метод json() для его синтаксического анализа.
import requests
response = requests.get('https://api.github.com')
json_data = response.json()
print(json_data)
Коды состояния
Проверка кода состояния ответа имеет решающее значение для того, чтобы убедиться в том, что запрос был выполнен успешно.
import requests
response = requests.get('https://api.github.com')
if response.status_code == 200:
print('Успешно!')
elif response.status_code == 404:
print('Не найден.')
Заголовки
Вы можете получить доступ к заголовкам ответа, используя атрибут headers.
import requests
response = requests.get('https://api.github.com')
print(response.headers['Content-Type'])
Отправка параметров в requests
Параметры URL
Вы можете передавать параметры в запросе GET, используя аргумент params.
import requests
params = {'q': 'requests+language:python'}
response = requests.get('https://api.github.com/search/repositories',
params=params)
print(response.json())
Данные формы
Чтобы отправить данные формы в POST-запросе, используйте аргумент data.
import requests
data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
Данные в формате JSON
Чтобы отправить данные в формате JSON, используйте аргумент json.
import requests
json_data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', json=json_data)
print(response.json())
Дополнительные возможности
Обработка таймаутов
Вы можете указать время ожидания для вашего запроса, чтобы избежать бесконечного ожидания.
import requests
try:
response = requests.get('https://api.github.com', timeout=1)
print(response.status_code)
except requests.Timeout:
print('Время выполнения запроса истекло')
Обработка ошибок
Используйте метод raise_for_status(), чтобы вызвать HTTPError при неверных ответах.
import requests
response = requests.get('https://api.github.com')
try:
response.raise_for_status()
except requests.HTTPError as err:
print(f'Произошла ошибка HTTP: {err}')
Кастомные заголовки
Вы можете отправить кастомные заголовки вместе с вашим запросом, используя аргумент headers.
import requests
headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://api.github.com', headers=headers)
print(response.json())
Аутентификация
Запросы поддерживают несколько методов аутентификации. Самым простым из них является Basic Authentication.
import requests
from requests.auth import HTTPBasicAuth
response = requests.get('https://api.github.com/user',
auth=HTTPBasicAuth('username', 'password'))
print(response.json())
Аутентификация по токену участника (JWT)
Для API, которым требуется токен-носитель (например, JWT), вы можете передать токен в заголовках.
import requests
headers = {'Authorization': 'Bearer YOUR_ACCESS_TOKEN'}
response = requests.get('https://api.example.com/protected', headers=headers)
print(response.json())
Заключение
Пакет Python Requests является незаменимым инструментом для любого разработчика, работающего с HTTP-запросами. Простота и удобство использования делают его универсальной библиотекой для создания веб-запросов на Python. Независимо от того, извлекаете ли вы данные из веб-службы, отправляете данные на сервер или обрабатываете различные типы HTTP-ответов, Requests предоставляет надежный и интуитивно понятный API для выполнения своей работы.
Изучив основы, описанные в этой статье, вы будете хорошо подготовлены к решению широкого спектра HTTP-задач в ваших проектах на Python.
Комментарии
Для того чтобы оставить свое мнение, необходимо зарегистрироваться на сайте