Ваш код в основном работал для меня, хотя я использовал другой сервер UAA.
Мне пришлось сделать только одно изменение. Вы перевернули заголовки Accept
и Content-Type
. Accept
должно быть application/json
, потому что это формат, который вы хотите вернуть, и Content-Type
должно быть application/x-www-form-urlencoded
, потому что это формат, который вы отправляете.
См. API Docs для справки .
import json
import requests
import urllib
import getpass
UAA_SERVER = "https://login.run.pivotal.io"
print("go to {}/passcode".format(UAA_SERVER))
params = {
"grant_type": "password",
"passcode": getpass.getpass(),
}
url = "https://login.run.pivotal.io/oauth/token"
headers = {
"Authorization": "Basic Y2Y6",
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json"
}
encodeParams = urllib.parse.urlencode(params)
response = requests.post(url, headers=headers, data=encodeParams)
rjson = response.json()
print(json.dumps(rjson, indent=4, sort_keys=True))
Я внес несколько других незначительных изменений, но они должны повлиять на функциональность.
- Используйте
getpass.getpass()
для загрузки пароля. - Задайте целевой сервер в качестве переменной.
- Довольно напечатайте ответ JSON.
Единственное, что следует отметить, это то, что клиенту OAuth2, который вы используете, должно быть разрешено использовать тип предоставления пароля. Похоже, что вы используете тот же клиент, который использует cf cli, поэтому, если ваш сервер UAA является частью стандартной установки Cloud Foun dry, это, вероятно, верно, но если он все еще не работает для вас, то Возможно, вам придется поговорить с администратором и убедиться, что клиент настроен на это.
Надеюсь, это поможет!