Nexpose InsightVM ‐ API pagination example GET scan templates - dishplate/blog GitHub Wiki
#2024-12-05 This works, including pagination
#I would prefer a different way of pagination...I have to figure that out.
import requests
import json
from requests.auth import HTTPBasicAuth
import urllib3
import os
from dotenv import load_dotenv
import pandas as pd
# Load credentials from .env file
load_dotenv()
username = os.getenv("username1")
password = os.getenv("password2")
# Disable SSL warnings
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
console_url = "https://ivm_console"
url = f'{console_url}/api/3/sites'
# Function to get all pages of sites
def get_all_sites(url, auth):
sites = []
params = {'page': 0, 'size': 100} # Adjust page size as needed
while True:
response = requests.get(url, auth=auth, params=params, verify=False)
if response.status_code == 200:
data = response.json()
sites.extend(data['resources'])
if params['page'] >= data['page']['totalPages'] - 1:
break
params['page'] += 1
else:
print(f'Failed to retrieve sites: {response.status_code}')
print(response.text)
break
return sites
# Make the request
sites = get_all_sites(url, HTTPBasicAuth(username, password))
# Print all site names retrieved
print("All Site Names Retrieved:")
site_data = []
for site in sites:
site_name = site.get("name", "N/A")
site_id = site.get("id", "N/A")
scan_template = site.get("scanTemplate", "N/A")
print(f'Site ID: {site_id}, Name: {site_name}, scanTemplate: {scan_template}')
site_data.append({'Site ID': site_id, 'Name': site_name, 'Scan Template': scan_template})
# Save the results to a CSV file
output_df = pd.DataFrame(site_data)
output_df.to_csv(r'C:/code/code/site_templates.csv', index=False)
print("Site data saved to site_templates.csv.")