Что значит, что параметры должны быть URL-encoded? GET запрос

Рейтинг: 0Ответов: 1Опубликовано: 08.08.2023

В документации по API написано, что параметры при передаче в запрос должны быть "URL-encoded"
Что это значит?
Я делаю запрос с параметрами, которые должны быть судя по документации "URL-encoded".

params = {'tag': value, 'tag2': value2}
response = requests.get(url, params = params)

В результате получаю

requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Полагаю, что ошибка именно из-за этих параметров.

Для сведения tag имеет вид числа в строке, типа "12345" а параметр tag2 имеет виде даты в строке типа "2023-01-02 Tue 22:00"

Ответы

▲ 4Принят

Ответ, конечно, легко гуглится, но можно и тут немного тему раскрыть.

Вот вам пример ссылки, которая кодирована и действительна (ссылка на эту страницу)

https://ru.stackoverflow.com/questions/1534853/%d0%a7%d1%82%d0%be-%d0%b7%d0%bd%d0%b0%d1%87%d0%b8%d1%82-%d1%87%d1%82%d0%be-%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80%d1%8b-%d0%b4%d0%be%d0%bb%d0%b6%d0%bd%d1%8b-%d0%b1%d1%8b%d1%82%d1%8c-url-encoded-get-%d0%b7%d0%b0%d0%bf%d1%80%d0%be%d1%81

То есть некоторые символы заменены. Конкретно в данном случае русские буквы.

Вы упоминаете, что используется формат даты "2023-01-02 Tue 22:00", которая содержит как минимум пробелы, что является не допустимым при использовании в ссылке.

Что делать и как проверить. Можно воспользоваться тем же requests, хотя urllib тоже может в этом помочь

import requests

value2 = "2023-01-02 Tue 22:00"
print(requests.utils.quote(value2))

Вывод будет таким

2023-01-02%20Tue%2022%3A00

Как было указано в комментариях к вопросу, модуль-requests сам собирает и кодирует ссылку, как этого требуется и ничего дополнительного делать не надо.

Здесь нужно поработать с ответом от запроса.

Посмотреть ссылку после получения ответа на запрос

print(response.url)

Посмотреть ответ, как он есть

print(response.text)