ребята.
У меня серьезные проблемы с этим.
Сценарий:
Здесь на работе мы используем инструмент управления уязвимостями QualysGuard. Пропуская все технические детали, этот инструмент в основном обнаруживает уязвимости на всех серверах, и для каждой уязвимости на каждом сервере он создает номер билета. Из пользовательского интерфейса я могу получить доступ ко всем этим билетам и загрузить файл CSV со всеми из них. Другой способ сделать это - использовать API. API использует некоторые вызовы cURL для доступа к базе данных и получения информации, которую я указываю в параметрах.
Метод:
Я использую такой скрипт, чтобы получить данные:
<?php
$username="myUserName";
$password="myPassword";
$proxy= "myProxy";
$proxyauth = 'myProxyUser:myProxyPassword';
$url="https://qualysapi.qualys.com/msp/ticket_list.php?"; //This is the official script, provided by Qualys, for doing this task.
$postdata = "show_vuln_details=0&SINCE_TICKET_NUMBER=1&CURRENT_STATE=Open&ASSET_GROUPS=All";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
$xml = simplexml_load_string($result);
?>
Сценарий выше отлично работает. Он подключается к API, передает ему некоторые параметры, и файл ticket_list.php
генерирует XML файл со всем, что мне нужно.
Проблемы:
1-) Этот скрипт разрешает только предел 1000 результатов в возвращаемом XML файле. Если мой запрос сгенерировал более 1000 результатов, сценарий создает TAG, подобный этому, в конце XML:
<TRUNCATION last="5066">Truncated after 1000 records</TRUNCATION>
В этом случае мне нужно выполнить вызов anoter cURL с параметрами ниже:
$postdata = "show_vuln_details=0&SINCE_TICKET_NUMBER=5066&CURRENT_STATE=Open&ASSET_GROUPS=All";
2-) В базе данных Qualys (облако) есть около 300 000 билетов, и мне нужно загрузить их все и вставить в MY базу данных, которая используется приложением, которое я создаю. Это приложение имеет некоторые формы, которые заполняются пользователем, и множество запросов выполняется в базе данных.
Уверенность: что было бы лучшим способом для меня сделать задачу выше? У меня есть некоторые идеи, но я полностью потеряю. Я думал:
** 1-) ** Создайте функцию, которая выполняет вызов выше, анализирует xml и, если существует тэг TRUNCATION
, он получает свое значение и снова вызывает себя, делая его рекурсивно, пока не появится результат без тега TRUNCATION
. Проблема с этим заключается в том, что я не смог объединить результаты XML каждого вызова, и я не уверен, что это вызовет проблемы с памятью, поскольку для этого потребуется около 300 вызовов cURL. Этот скрипт будет выполнен автоматически, используя сервер cronTab в нерабочий период.
2-) Вместо того, чтобы извлекать все данные, я делаю упомянутые мною формы, помещая данные в скрипт и делая вызовы cURL с параметрами, которые пользователь POST
редактировал. Но опять же я не уверен, что это будет хорошо, поскольку мне все равно придется выполнять несколько вызовов, в зависимости от параметров, которые отправляет пользователь.
3-) Это сумасшедший: используйте какое-то программное обеспечение Macro для записи меня, когда я вхожу в пользовательский интерфейс, перейдите на страницу, где находятся билеты, нажмите кнопку загрузки, проверьте параметр CSV и нажмите, чтобы снова загрузить, Затем экспортируйте этот скрипт на некоторый язык, например python или java, создайте задачу в cronTab и создайте скрипт, который анализирует CSV, загружает и вставляет данные в базу данных. (Сумасшедший или нет? = P)
Любая помощь очень приветствуется, возможно, ответ прямо на моих глазах, и я еще не получил ответа. Заранее спасибо!
Я полагаю, что правильный путь будет включать в себя сотрудника очереди, однако, если бы я был вами, я бы заставил ваш скрипт захватить 5 из этих файлов XML в одном execution- захвате 1, вставить строки, удалить из памяти, повторить. Затем я проверил его, запустив его несколько раз вручную, чтобы узнать, какое время выполнения и память он требует. Как только у вас есть хорошая идея о времени выполнения, и вы можете видеть, что память не будет проблемой, заплатите cron за чуть меньше этого времени. Если все идет хорошо, это должно быть около минуты между прогонами, и вы можете получить все это в своей БД в течение часа.