Dlaczego treść żądania HTTP POST musi być dołączona do JSON w Pythonie?
Wpadłem na ten problem podczas zabawy z zewnętrznym API. Przesyłałem moje dane ciała jako słownik bezpośrednio do żądania i otrzymywałem 400 błędów:
data = {
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
}
Po dodaniu opakowania json.dumps działa:
data = json.dumps({
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
})
Nie do końca rozumiem, dlaczego jest to konieczne, ponieważ słowniki i obiekty JSON są identyczne składniowo. Czy ktoś może mi pomóc zrozumieć, co dzieje się za kulisami?
Dla kompletności, oto moje nagłówki:
headers = {'API-KEY': 'blerg', 'Accept-Encoding': 'UTF-8', 'Content-Type': 'application/json', 'Accept': '*/*', 'username': 'user', 'password': 'pwd'}
EDYTOWAĆ:
Nie wspomniałem o tym wcześniej, ale teraz czuję, że może to być istotne. Używam biblioteki Python Requests, a inny post wydaje się sugerować, że nigdy nie powinno się kodować parametrów do obiektu żądania:https://stackoverflow.com/a/14804320/1012040
„Niezależnie od tego, czy GET / POST nigdy nie będziesz musiał ponownie kodować parametrów, po prostu bierze on słownik jako argument i dobrze jest iść”.
Wydaje się, że serializacja nie powinna być konieczna?
Mój obiekt żądania:
response = requests.post(url, data=data, headers=headers)