Понимание разницы между этими двумя запросами Python POST-вызовами (данные и аргументы json)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Понимание разницы между этими двумя запросами Python POST-вызовами (данные и аргументы json)

Сообщение Anonymous »

Это игрушечный, невоспроизводимый пример, поскольку я не могу поделиться оригиналом. Я думаю, что это ответственно и может помочь другим. Из других сообщений SO, подобных этому и этому, я понимаю, что с учетом некоторого словаря параметров d они эквивалентны:

Код: Выделить всё

requests.post(url, data=json.dumps(d))
requests.post(url, json=d)
Параметры конечной точки токена были определены в документации следующим образом:
  • url: {{base_url}}/ токен
  • параметры

    grant_type={{пароль}
  • username={{username }}
  • password={{password}}
  • scope={"account":"{{account}}", "tenant": "{{tenant}}"

Я начал с этого, с переменных загружен из файла .env:

Код: Выделить всё

resp = requests.post(f'{base_url}/token',
json={'grant_type': 'password', 'username': uname, 'password': pwd,
'scope': {'account': account, 'tenant': tenant}})
resp.text
# '{"error":"unsupported_grant_type"}'
Я попробовал перейти на аргумент данных и получил более вменяемую ошибку:

Код: Выделить всё

resp = requests.post(f'{base_url}/token',
data={'grant_type': 'password', 'username': uname, 'password': pwd,
'scope': {'account': account, 'tenant': tenant}})
resp.text
# '{"error":"invalid_grant","error_description":"{\\"ErrorMessage\\":\\"Error trying to Login  - User [username] Account [] Unexpected character encountered while parsing value: a.
Я попробовал еще несколько вещей, например, заключить аргументы в кавычки (например, {'account': f"{account}"), но безуспешно, и в конечном итоге мне это удалось " гибридный" метод:

Код: Выделить всё

resp = requests.post(f'{base_url}/token',
data={'grant_type': 'password', 'username': uname, 'password': pwd,
'scope': json.dumps({'account': account, 'tenant': tenant})})
Мои вопросы:

[*]является ли этот нюанс «реальным» по сравнению с простым чтением связанных вопросов? А именно, казалось, что один из них или использует data=json.dumps(d) или json=d, но я не нашел ответа, смешивающего их (и обертывающего все данные arg в json.dumps() ломают мою рабочую окончательную версию)
[*]как относительный нуб в API/сетевых вещах, будет ли это заметно для меня из аргументов документации, перечисленных выше, или был метод проб и ошибок единственный способ обнаружить это?
[*]с учетом моего окончательного решения, существовал ли лучший/более правильный способ передачи этих параметров? >


Подробнее здесь: https://stackoverflow.com/questions/759 ... calls-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»