Сообщить об ошибке.

GET и POST запросы c модулем requests в Python

Методы requests.get() и requests.post() модуля requests

Передача параметров в URL для HTTP GET-запросов.

Часто в строке запроса URL-адреса, необходимо отправить какие-то данные. При составлении URL-адреса вручную, эти данные задаются в виде пар ключ/значение в конце URL-адреса после вопросительного знака, например httpbin.org/get?key=val. Модуль requests позволяет передавать эти параметры в метод requests.get() виде словаря строк, используя ключевой аргумент params. Например, если надо передать key1=value1 и key2=value2 для GET запроса к URL-адресу httpbin.org/get, то используйте следующий код:

>>> import requests
# подготовка дополнительных параметров для GET запроса
>>> params = {'key1': 'value1', 'key2': 'value2'}
>>> resp = requests.get('https://httpbin.org/get', params=params)
# смотрим, что URL-адрес был правильно закодирован
>>> print(resp.url)
# https://httpbin.org/get?key2=value2&key1=value1

Обратите внимание, что любой ключ словаря, значение которого равно None, не будет добавлен в строку запроса URL-адреса.

В качестве значения словаря можно передать список дополнительных элементов URL-адреса:

>>> import requests
# ключ словаря 'key2' имеет список значений
>>> params = {'key1': 'value1', 'key2': ['value2', 'value3']}
# создаем GET запрос 
>>> resp = requests.get('https://httpbin.org/get', params=params)
# смотрим полученный URL
>>> print(resp.url)
# https://httpbin.org/get?key1=value1&key2=value2&key2=value3

Передача параметров в URL для HTTP POST-запросов.

Как правило, в POST-запросах встает необходимость отправить некоторые закодированные в форме данные. Для этого необходимо передать словарь в аргумент data метода requests.post(). Словарь с данными формы будет автоматически закодирован.

Обратите внимание, что имя аргумента для передачи параметров метода requests.post(), отличается от имени аргумента дополнительных параметров метода requests.get().

>>> import requests
# подготовка параметров для POST-запроса
>>> param = {'key1': 'value1', 'key2': 'value2'}
# обратите внимание, что для метода POST, аргумент для 
# передачи параметров в запрос отличается от метода GET  
>>> resp = requests.post("https://httpbin.org/post", data=param)
>>> print(resp.text)
# {
#   ...
#   "form": {
#     "key2": "value2",
#     "key1": "value1"
#   },
#   ...
# }

Аргумент data также может иметь несколько значений для каждого ключа. Это можно сделать, передав данные либо списком кортежей, либо словарем со списками в качестве значений. Это особенно полезно, когда форма содержит несколько элементов, использующих один и тот же ключ:

>>> import requests
>>> param_tuples = [('key1', 'value1'), ('key1', 'value2')]
>>> resp1 = requests.post('https://httpbin.org/post', data=payload_tuples)
>>> param_dict = {'key1': ['value1', 'value2']}
>>> resp2 = requests.post('https://httpbin.org/post', data=payload_dict)
>>> print(resp1.text)
# {
#   ...
#   "form": {
#     "key1": [
#       "value1",
#       "value2"
#     ]
#   },
#   ...
# }
>>> resp1.text == resp2.text
# True