ошибка неверного запроса 400 при использовании функции python request.post

Я пытаюсь сделать простой почтовый запрос через библиотеку запросов Python, и я получаю ошибку неверного запроса (400), в то время как мой URL-адрес предположительно правильный, поскольку я могу использовать его для выполнения получения. Я очень новичок в запросах REST, я прочитал много руководств и документации, но я думаю, что есть еще вещи, которые я не понимаю, поэтому моя ошибка может быть основной. Может быть, непонимание типа URL-адреса, который я должен отправить через POST. Вот мой код:

import requests
v_username = "username"
v_password = "password"
v_headers = {'content-type':'application/rdf+xml'}
url = 'https://my.url'
params = {'param': 'val_param'}
payload = {'data': 'my_data'}
r = requests.post(url, params = params, auth=(v_username, v_password), data=payload, headers=v_headers, verify=False)
print r

Я использовал пример документации по запросам.


person Toussah    schedule 08.11.2013    source источник
comment
Ошибка 400 генерируется сервером; requests отлично справился со своей задачей. Здесь мы ничем не можем вам помочь.   -  person Martijn Pieters    schedule 08.11.2013
comment
Этот заголовок Content-Type — чепуха. Когда вы передаете словарь аргументу data, Requests создает и отправляет эти данные как Content-Type: application/x-www-form-urlencoded. Зачем ты его устанавливаешь?   -  person Lukasa    schedule 08.11.2013
comment
Ну, это заголовок, который я использовал при выполнении запросов Get, поэтому я подумал, что он будет работать так же и для Put. Я не понимаю, что мне тогда делать, объединить мои данные и мой заголовок в одном словаре?   -  person Toussah    schedule 12.11.2013


Ответы (1)


У меня была похожая проблема, я попытался изменить параметры на данные или с помощью json.dumps():

from json import dumps

r = requests.post(url, params=dumps(params), auth=(v_username, v_password), data=payload, headers=v_headers, verify=False)

or

r = requests.post(url, data=dumps(params), auth=(v_username, v_password), data=payload, headers=v_headers, verify=False)
person Aldo Escobar    schedule 25.04.2016
comment
*json.dumps(параметры) - person Gray Adams; 30.06.2017