Часто в строке запроса 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
Как правило, в 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