Проблема с вызовом AppDynamics REST с Python

Я попытался вызвать AppDynamics API с помощью запросов Python, но столкнулся с проблемой. Я написал пример кода с использованием клиента Python следующим образом...

from appd.request import AppDynamicsClient
c = AppDynamicsClient('URL','group','appd@123')
for app in c.get_applications():
    print app.id, app.name

Это работает нормально.

Но если я сделаю простой вызов, подобный следующему

import requests
usr =<uid>
pwd =<pwd>
url ='http://10.201.51.40:8090/controller/rest/applications?output=JSON'
response = requests.get(url,auth=(usr,pwd))
print 'response',response

Я получаю следующий ответ:

response <Response [401]>

Я делаю что-то неправильно здесь?


person Soumen    schedule 27.06.2017    source источник


Ответы (2)


Пара вещей:

Я думаю, что общий формат URL-адреса для приложений динамики приложений (обратите внимание на «#»):

url ='http://10.201.51.40:8090/controller/#/rest/applications?output=JSON'

Кроме того, я думаю, что метод request.get нуждается в дополнительном параметре для «учетной записи». Например, мой формат авторизации выглядит так:

auth = (_username + '@' + _account, _password)

Я могу получить правильный код ответа с этой конфигурацией. Дайте мне знать, если это работает для вас.

person ShreyasG    schedule 31.08.2017

Вы также можете использовать собственный код Python для большего контроля:

пример:

import os
import sys
import urllib2
import base64

# if you have a proxy else comment out this line
proxy = urllib2.ProxyHandler({'https': 'proxy:port'}) 

opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)

username = "YOUR APPD REST API USER NAME"
password = "YOUR APPD REST API PASSWORD"

#Enter your request
request = urllib2.Request("https://yourappdendpoint/controller/rest/applications/141/events?time-range-type=BEFORE_NOW&duration-in-mins=5&event-types=ERROR,APPLICATION_ERROR,DIAGNOSTIC_SESSION&severities=ERROR")

base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
response = urllib2.urlopen(request)

html = response.read()

Это даст вам ответ, и вы сможете проанализировать XML по мере необходимости.

Если вы предпочитаете JSON, просто укажите это в запросе.

person Alexandre Grimaud    schedule 22.05.2018