Как авторизоваться в учетной записи mulesoft / cloudhub из python?

Мне нужно скачать журналы с mulesoft / cloudhub с python. Я попытался получить журналы из командной строки, и это было успешно. то, что я пробовал в CMD, -

   1. curl -d "username=<my_username>&password=<my_password>" https://anypoint.mulesoft.com/accounts/login
   2. curl -H "Authorization: Bearer <access token>" -H "X-ANYPNT-ENV-ID: <environment ID>" "https://anypoint.mulesoft.com/cloudhub/api/v2/applications/<domain>/instances/<instance ID>/log-file" 

Я попробовал следующий код на python-

import http.client

headers = {'X-ANYPNT-ENV-ID': '{env id}'}

conn = http.client.HTTPSConnection('anypoint.mulesoft.com')
conn.request('GET','/cloudhub/api/v2/applications/{domain}/instances/{instanceId}/logs', urlencode(headers))
res = conn.getresponse()

data = res.read()
print(res.status, res.reason)
print(data.decode('utf-8'))
print(res.getheaders())

Но я получил следующую ошибку -

{"error":"Unauthorized","message":"Failed to create session. You must provide a valid Authorization header"}

Я новичок в mulesoft, поэтому хотелось бы получить подробный ответ. Спасибо.


person Vidhya Dhara    schedule 01.10.2020    source источник


Ответы (2)


В скрипте Python отсутствует первый вызов для получения токена доступа, необходимого для запроса API. Для этого нужен первый запрос на завиток. Вам нужно добавить conn.request, чтобы получить токен, извлечь его и добавить заголовок авторизации в запрос журнала.

person aled    schedule 01.10.2020

Наконец, после стольких трасс, я получил ответ. Мне нужно было закодировать свое имя пользователя и пароль, а затем передать его, как показано ниже:

a = bytes('<my_usermame>:<my_password>', 'ascii')
userAndPass = b64encode(a).decode("ascii")

headers = {'Authorization' : 'Basic %s' %userAndPass , 'X-ANYPNT-ENV-ID': '<my_env_id> }

conn = http.client.HTTPSConnection('anypoint.mulesoft.com')
conn.request('GET','/cloudhub/api/v2/applications/{domain}/instances/{instanceId}/logs', headers=headers)
res = conn.getresponse()
data = res.read()
print(res.status, res.reason)
print(data.decode('utf-8'))

Также добавлено headers = headers вместо urlencode (headers) при выполнении запроса.

person Vidhya Dhara    schedule 05.10.2020