Интеграция Qualys API с Python

Потратив последние несколько дней на то, чтобы заставить API Qualys работать с python, я обычно сталкиваюсь с ошибками, такими как 401 и с подобными ошибками, из-за того, что примеры кода на python говорят, что они не поддерживаются.

Поскольку API Qualys написан с использованием curl, я использовал https://curl.trillworks.com/ для преобразования curl в python.

Код, который я использовал: (curl)

curl -u "USERNAME:PASSWD" -H "X-Requested-With: Curl" -X "POST" -d
"action=create&title=My+Dynamic+Search+List&global=1&published_dat
e_within_last_days=7&patch_available=1"
"https://qualysapi.qualys.com/api/2.0/fo/qid/search_list/dynamic/"

и преобразовал его в python:

import requests

headers = {
    'X-Requested-With': 'Curl',
}

data = [
  ('published_date_within_last_days', '7'),
  ('patch_available', '1'),
]

response = requests.post('https://qualysapi.qualys.com/api/2.0/fo/qid/search_list/dynamic/', headers=headers, data=data, auth=('USRNAME', 'PASSWORD'))
print (response)

И получил 401 ответ. Любые идеи или какие-либо дополнительные разъяснения, которые я должен добавить? Спасибо

3 ответа

В соответствии с Qualys API v10.16 вы можете попробовать аутентификацию на основе сеанса, передав QualysSessionкуки после входа в систему.

Опубликовать запрос на вход:

      login_api = api_url+"/api/2.0/fo/session/"

myheaders = { 'X-Requested-With': 'python'}
myparams  = { "action" : "login", "username" : api_username,  "password" : api_password} 

r_login =  requests.post(login_api, headers=myheaders, params=myparams)

print(r_login.status_code)
print(r_login.cookies.get_dict())

После получения ответа на вход в систему вы можете передать файлы cookie как dictв последующем getили же post:

      mycookies =  r_login.cookies.get_dict()
r_new =  requests.post(another_url, headers=myheaders, params=myparams, cookies=mycookies)

Я предполагаю, что ввод имени пользователя / пароля недействителен.

Есть две проблемы: ваши данные представлены в виде списка, а должны быть в формате json, а во-вторых, вы должны использовать HTTPBasicAuth при выполнении запросов с именем пользователя и паролем.

Ниже приведен исправленный код

      import requests
from requests.auth import HTTPBasicAuth


headers = {
    'X-Requested-With': 'Curl',
}

data = {
  'published_date_within_last_days': '7',
  'patch_available': '1',
}

response = requests.post('https://qualysapi.qualys.com/api/2.0/fo/qid/search_list/dynamic/', headers=headers, data=data, auth=HTTPBasicAuth('USRNAME', 'PASSWORD'))
print (response)
Другие вопросы по тегам