Запрос Python, содержащий параметры со значениями и параметры без значений
Я пишу оболочку Python для API, который поддерживает параметры запроса, которые имеют значения (например, param1ниже) и параметры запроса, которые не имеют значения значений (например, param2ниже), т.е.
https://example.com/service?param1=value1¶m2
Известно, что библиотека HTTP-запросов поддерживает параметры со значениями и параметры без значений . Однако мне нужно указать оба типа параметров.
Ответы
У вас есть два варианта с запросами в отношении строки запроса: 1) предоставить пары ключ / значение посредством словаря или 2) предоставить строку. Если вы укажете №1, вы всегда получите знак «=» для каждой пары ключ / значение ... не то, что вам нужно. Таким образом, вы должны использовать # 2, который позволит вам делать все, что вы хотите, поскольку он будет просто включать то, что вы ему даете, как всю строку запроса. Обратной стороной является то, что вам нужно создать строку запроса самостоятельно. Конечно, есть много способов сделать это. Вот один из способов:
params = {'param1': 'value1', 'param2': None}
params = '&'.join([k if v is None else f"{k}={v}" for k, v in params.items()])
r = requests.get('https://example.com/service', params=params)
print(r.url)
Этот способ позволяет вам предоставить словарь, как если бы вы позволяли Requests создавать строку запроса, но он позволяет вам указать значение, Nullчтобы указать, что вам нужно только имя ключа, без '='. Запросы обычно не включают параметр вообще, если его значение находится Noneв словаре.
Результатом этого кода является именно то, что вы привели в качестве примера того, что вы хотите:
https://example.com/service?param1=value1¶m2