Я столкнулся с этой проблемой при игре с внешним API. Я отправлял данные своего тела в виде словаря прямо в запрос и получал 400 ошибок:
data = {
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
}
Когда я добавил обертку json.dumps, он работает:
data = json.dumps({
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
})
Я не совсем понимаю, почему это необходимо, поскольку словари и объекты JSON синтаксически идентичны. Может кто-нибудь помочь мне понять, что здесь происходит за кулисами?
Для полноты, вот мои заголовки:
headers = {'API-KEY': 'blerg', 'Accept-Encoding': 'UTF-8', 'Content-Type': 'application/json', 'Accept': '*/*', 'username': 'user', 'password': 'pwd'}
EDIT:
Я не упоминал об этом раньше, но теперь чувствую, что это может быть актуальным. Я использую библиотеку запросов Python, а другая публикация, похоже, предполагает, что вам никогда не придется кодировать параметры для объекта запроса: qaru.site/info/9731/...
"Независимо от того, не нужно ли снова и снова вводить параметры GET/POST, он просто вводит словарь в качестве аргумента и имеет смысл идти".
Кажется, что сериализация не нужна?
Мой объект запроса:
response = requests.post(url, data=data, headers=headers)