Не удается получить и опубликовать в alm, используя остальные API и python. Всегда получаю 401 код статуса - PullRequest
2 голосов
/ 21 января 2020

Я автоматизирую ALM с помощью остальных API и python. Все, что я мог сделать сейчас, это войти в систему и выйти из системы. Только apis для входа в систему и выхода из системы дает правильный ответ. Все остальные дают либо 500/401 ошибку.

import requests
from requests.auth import HTTPBasicAuth
from xml.etree.ElementTree import Element, SubElement, tostring, parse
ALM_USER_NAME = "XXXX"
ALM_PASSWORD = "XXXX"
ALM_DOMAIN = "XXXX"
ALM_PROJECT="XXXX"

ALM_URL ="http://xxxxxxxxx/qcbin/"
QC_LOGOUT_END_POINT = ALM_URL + "authentication-point/logout"
session = requests.Session()
session.verify = False

auth = session.post(ALM_URL + "authentication-point/authenticate",
                    auth=HTTPBasicAuth(ALM_USER_NAME, ALM_PASSWORD))
print("Authentication ", auth, auth.text, session.cookies)

site_session = session.post(ALM_URL + "rest/site-session")
print("Session ", site_session, site_session.text, session.cookies)

check = session.get(ALM_URL + "rest/is-authenticated")
print("Check ", check, check.text)

# Enforce JSON output
session.headers.update({ 'Accept': 'application/json','Cookie': check.headers['set-cookie']})
#projects = session.get(hpqc_server + "rest/domains/"+ALM_DOMAIN+"/projects")
# Post a New Defect
defect = dict()
defect['Type'] = 'defect'
defect['name'] = 'StackOverflow'
defect['user-10'] = 'Content'  # User defined field
defect['severity'] = '1-Low'
defect['priority'] = '1-Low'
defect['detected-by'] = 'userid'
defect['creation-time'] = '2017-11-13'

# Call the generic method to build the xml data
defect_payload = generate_xml_data(defect)

deft=session.get(ALM_URL + "rest/domains/"+ALM_DOMAIN+"/projects/"+ALM_PROJECT+"/content/defects")
print(deft.status_code)


if session:
            res = session.post(QC_LOGOUT_END_POINT)
            if res.status_code == 200:
                print ("ALM: Logged out")

ответ для входа в систему: 200 ответ для сессии: 201 ответ за дефекты: 401

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Похоже, в вашем запросе отсутствуют файлы cookie. Пожалуйста, отладьте его / распечатайте все куки. В моем случае (также с использованием python запросов API с ALM 12.55) следующие куки отправляются с каждым запросом (например, для чтения дефектов):

ALM_USER
LWSSO_COOKIE_KEY
QCSession
XSRF-TOKEN
JSESSIONID

Сводка необходимых шагов:

  1. Отправьте запрос аутентификации на authentication-point/authenticate. Сохраните возвращенный LWSSO_COOKIE_KEY повар ie.
  2. Отправьте запрос сеанса на rest/site-session и отправьте LWSSO_COOKIE_KEY повар ie вместе с ним. Сохраните возвращенные файлы cookie ALM_USER, QCSession, XSRF-TOKEN и JSESSIONID
  3. Объедините все файлы cookie в один контейнер ie (RequestsCookieJar.update(self, other))

In Ваша строка "# Enforce JSON output" обновляет файлы cookie в заголовке. Вы устанавливаете куки check. Возможно, повар ie из site_session отсутствует.

0 голосов
/ 12 февраля 2020

Мне удалось заставить его работать. Мне нужно было сделать первоначальный вызов для входа в URL, чтобы получить куки для LWSSO_COOKIE_KEY и QCSession. После этого я получаю ответ, который мне нужен.

Вот мой код с немного измененным URL-адресом и паролем по соображениям безопасности. Кроме того, я получил зашифрованный пароль авторизации Basi c от просмотра python кода, сгенерированного почтальоном:

url_signin = "http://????????????/qcbin/api/authentication/sign-in"
url_defects = "http://??????????/qcbin/api/domains/{Domain name}/projects/{project_name}/defects"
payload  = {}

headers1 = {
    "Authorization": "Basic ?????????"}

si = requests.get(url_signin, headers = headers1)
QCsession = si.cookies.items()[2][1]
lwsso = si.cookies.items()[1][1]

headers = {
    "Authorization": "Basic ??????????",
    'Cookie': "QCSession="+ QCsession + "; "+"LWSSO_COOKIE_KEY=" +lwsso
}

response = requests.request("GET", url, headers=headers, data = payload)

print(response.text)

Дайте мне знать, если у вас есть какие-либо вопросы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...