В чем разница между '{"title": "some title", "body": "some body"}' и "{" title ": title," body ": body} ', когда title и body являются строковыми значениями? - PullRequest
0 голосов
/ 24 апреля 2020

Код ниже работает:

r = requests.post(url = myurl, data = '{"title":"sometitle", "body":"some body"}')

Но этот код не работает:

t = "title"   
b = "body"   
r = requests.post(url = myurl, data = '{"title":title, "body":body}')   

Второй вызывает ошибку 400.
Я не могу найти ничего значимого Разница.
То, что я изменил, это просто замена строки "" на строковое значение.

В соответствии с запросами do c, данные являются

data - (необязательно) словарь, список кортежей, байтов или файлоподобный объект для отправки в теле Запрос.

Мне нужно получить некоторые значения и сохранить их в переменных, поэтому мне нужно сделать код вторым способом.
Как мне решить эту проблему?

enter image description here

1 Ответ

0 голосов
/ 24 апреля 2020

data - (необязательно) словарь, список кортежей, байтов или файлоподобный объект для отправки в теле запроса.

В обоих случаях вы не передаете толковый словарь. Вы передаете строку оба раза.

r = requests.post(url = myurl, data = '{"title":"sometitle", "body":"some body"}')

Это словарь, разобранный в строку.

t = "title"   
b = "body"   
r = requests.post(url = myurl, data = '{"title":title, "body":body}') 

Это недопустимый словарь, разобранный в строку. Вы, вероятно, хотели написать:

t = "title"   
b = "body"   
r = requests.post(url = myurl, data = {"title":title, "body":body}) 

Что эквивалентно:

r = requests.post(url = myurl, data = {"title":"title", "body":"body"}) 

Здесь вы будете передавать словарь и также можете ссылаться на переменные. Это не строка, которую вы передаете.

Если вам требуется, чтобы данные были в строковом формате (что не имеет смысла, поскольку в документации, на которую вы ссылаетесь, требуется словарь), вы делаете:

t = "title"   
b = "body"   
r = requests.post(url = myurl, data = json.dumps({"title":title, "body":body})) 
...