Параметры в запросах с библиотеки Requests в Python

Параметры в запросах с использованием библиотеки Requests в Python

При работе с веб-API и другими веб-сервисами часто требуется передавать различные параметры в запросах. Эти параметры могут передаваться либо в URL, либо в теле запроса, в зависимости от типа запроса и данных, которые вы хотите передать. Давайте разберемся, как это сделать с использованием библиотеки Requests для Python.

Передача параметров в URL

Параметры, передаваемые в URL, часто используются в GET-запросах и называются параметрами строки запроса (или query parameters). Они начинаются после символа ? в URL и разделяются символом &.

URL с параметрами:

https://api.example.com/search?query=python&count=10

Чтобы передать такие параметры с использованием Requests, можно использовать аргумент params:

import requests

url = 'https://api.example.com/search'
parameters = {
    'query': 'python',
    'count': 10
}

response = requests.get(url, params=parameters)
print(response.url)  # Выведет: https://api.example.com/search?query=python&count=10
print(response.json())

Использование аргумента params делает код более читаемым и уменьшает вероятность ошибок при формировании URL.

Передача данных в теле запроса

В то время как GET-запросы обычно используют параметры строки запроса, методы POST, PUT и PATCH часто требуют передачи данных в теле запроса. Эти данные могут представлять собой формы, JSON или даже файлы.

  • Передача данных формы

Для передачи данных в виде формы используйте аргумент data:

import requests

url = 'https://api.example.com/upload'
form_data = {
    'name': 'John',
    'age': 30
}

response = requests.post(url, data=form_data)
print(response.json())
  • Передача JSON

Если вы хотите отправить данные в формате JSON, используйте аргумент json:

import requests

url = 'https://api.example.com/data'
json_data = {
    'name': 'John',
    'age': 30
}

response = requests.post(url, json=json_data)
print(response.json())

При использовании аргумента json библиоткеа Requests автоматически устанавливает заголовок Content-Type в значение application/json.

  • Передача файлов

Для отправки файлов используйте аргумент files:

import requests

url = 'https://api.example.com/upload'
files = {'file': ('filename.txt', open('filename.txt', 'rb'))}

response = requests.post(url, files=files)
print(response.json())

Кодирование параметров

Библиотека Requests автоматически кодирует параметры запроса. Например, если ваш параметр содержит пробелы, специальные символы или небуквенно-цифровые символы, Requests корректно преобразует их для безопасной передачи в URL. Это устраняет необходимость в ручном кодировании параметров.

Таймауты

При передаче параметров в запросе, особенно при работе с внешними API, рекомендуется устанавливать таймауты. Это может предотвратить "зависание" вашего приложения в ожидании ответа:

response = requests.get(url, params=parameters, timeout=10)  # 10 секунд таймаута

Заголовки

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

headers = {
    'Authorization': 'Bearer YOUR_TOKEN_HERE',
    'User-Agent': 'MyApp/1.0'
}

response = requests.get(url, headers=headers)

Обработка ошибок

Requests возвращает объект ответа даже при получении HTTP-ошибок (например, 404 или 500). Чтобы проверить, был ли запрос успешным, используйте response.raise_for_status():

response = requests.get(url)
response.raise_for_status()  # выбросит исключение, если статус кода - ошибка

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

Заключение

Библиотека Requests предлагает гибкие и простые способы передачи параметров в различных формах, будь то параметры строки запроса, данные формы, JSON или файлы. Это делает Requests идеальным выбором для взаимодействия с разнообразными веб-сервисами и API.

Содержание: