При работе с веб-API и другими веб-сервисами часто требуется передавать различные параметры в запросах. Эти параметры могут передаваться либо в URL, либо в теле запроса, в зависимости от типа запроса и данных, которые вы хотите передать. Давайте разберемся, как это сделать с использованием библиотеки Requests для Python.
Параметры, передаваемые в 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
:
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.
Содержание: