popov . dev

Main

Library

Articles

Делаем HTTP запр...

Делаем 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.

Comments

In order to leave your opinion, you need to register on the website