Ответ 1
Причина, по которой вы получаете JSON, заключается в том, что вы явно вызываете json.dumps
для генерации строки JSON. Просто не делайте этого, и вы не получите строку JSON. Другими словами, измените свою первую строку на это:
data = {'param1': 'value1', 'param2': 'value2'}
Как объясняют документы, если вы передадите dict в качестве значения data
, он будет закодирован в форме, а если вы передадите строку, она будет отправлена как есть.
Например, в одном окне терминала:
$ nc -kl 8765
В другой:
$ python3
>>> import requests
>>> d = {'spam': 20, 'eggs': 3}
>>> requests.post("http://localhost:8765", data=d)
^C
>>> import json
>>> j = json.dumps(d)
>>> requests.post("http://localhost:8765", data=j)
^C
В первом терминале вы увидите, что первое тело запроса это (и Content-Type application/x-www-form-urlencoded
):
spam=20&eggs=3
... в то время как второй это (и не имеет Content-Type):
{"spam": 20, "eggs": 3}