Интеграция 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)