Помогите разобраться с авторизацией на python api
https://support.huawei.com/view/contentview/getFileStream?mid=SUPE_DOC&viewNid=EDOC1000126989&nid=EDOC1000126989&partNo=j005&type=htm#ainterface-for-access-authentication вот тут как авторизоваться на СХД, это все проходит, json возвращает значения.
Имеем код:
import http
import requests
import json
import ssl
import time
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
data = {
"username": "storage",
"password": "!123",
"scope": "1"
}
url = 'https://192.168.10.10:8088/deviceManager/rest/xxxxx/sessions'
r = requests.post(url, data=json.dumps(data), verify=False)
token = json.loads(r.text)['data']['iBaseToken']
headers = { 'iBaseToken:' + token }
re = requests.get('https://192.168.10.10:8088/deviceManager/rest/2102350BVD10HA000036/performace_statistic/cur_statistic_data?CMO_STATISTIC_UUID=207:0A&CMO_STATISTIC_DATA_ID_LIST=26&timeConversion=0', verify=False)
j = json.loads(re.text)
print j
Ну и соответственно получаю ошибку что не авторизован, postman если делаю запрос после авторизации то в cookie вижу сессию , как мне тут включать этот запрос в эту сессию
Ответы (2 шт):
Сильно не углублялся в суть вопроса, но мне кажется в Вашем запросе
re = requests.get('https://192.168.10.10:8088/deviceManager/rest/2102350BVD10HA000036/performace_statistic/cur_statistic_data?CMO_STATISTIC_UUID=207:0A&CMO_STATISTIC_DATA_ID_LIST=26&timeConversion=0', verify=False)
не хватает headers, который Вы определили строчкой выше.
headers = { 'iBaseToken:' + token }
re = requests.get('https://192.168.10.10:8088/deviceManager/rest/2102350BVD10HA000036/performace_statistic/cur_statistic_data?CMO_STATISTIC_UUID=207:0A&CMO_STATISTIC_DATA_ID_LIST=26&timeConversion=0', headers={'iBaseToken: ' + token} verify=False)
Чтобы cookie, который вернул предыдущий запрос, использовался в следующих запросах используйте механизм сессий в requests.
Вместо requests.post делайте:
s = requests.Session()
# если здесь сервер возвращает cookie
s.post(...)
# то здесь cookie будет автоматически использовано
# при условии, что запрос на тот же домен (или поддомен в зависимости от настроек куки)
s.get(...)
Если же передача нужна таки через header, то правильно так:
headers = {'iBaseToken': token }