У меня есть Dynatrace NAM
продукт / веб-приложение.После входа в систему вручную, я могу выполнить следующие шаги с помощью мыши, чтобы экспортировать данные, отображаемые в браузере.
- войти в систему.
http://10.96.1.232/
- нажмите
Reports
: URL-адрес http://10.96.1.232/index
, который автоматически перенаправляет на http://10.96.1.232/LSServlet?dmiAction=Generate&lsAction=LoadByName&lsEntryName=Application%20Health%20Status
- click
DMI
: отчеты Data Mining: http://10.96.1.232/dashboard?_callUrl=menu_reports_dashboard
- click
Servers
: http://10.96.1.232/LSServlet?lsEntryName=Servers&dmiAction=Generate&pUtil_width_=1280&pUtil_height_=615&
- наконец нажмите
Export Data
, он отображает данные в браузере, URL-адрес: http://10.96.1.232/IntegratedDMI?pID_=1551421208481-1154896%40APMAMD02%3A80&pexportSection_=s1&dmiAction=Export&startTime=1551369600000&endTime=1551419700000
Требуется, чтобы я экспортировал данные на последнем шаге в файл .csv
и загрузил их в Spunk для индексации.
Мое решение - смоделировать шаги / разговоры, используя httpclient до последнего шага, проанализировать ответ, извлечь данные и вставить в файл csv
.
Итак, мой код выглядит следующим образом /2/
, и я получил ответ в виде кода ошибки 401, не авторизованного с сервера, указанного в /1/
.
Любые подсказки, которые я мог бы смоделировать между httpclient и сервером NAM Dynatrace, чтобы я мог проанализировать страницу экспортируемых данных и извлечь необходимые данные.
/ 1 /
[root@xxx xxx]# java -jar DTExtractData-1.0-jar-with-dependencies.jar
executing request to http://10.96.1.232:80
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
----------------------------------------
HTTP/1.1 401 Unauthorized
Set-Cookie: JSESStieuvg80=001073DE0541424E75B9597F9D36D254; Path=/; HttpOnly
wrongLoginStatus: 401
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Vary: Accept-Encoding
Date: Fri, 01 Mar 2019 06:57:30 GMT
Server:
----------------------------------------
<!DOCTYPE html>
<html>
<head>
<!-- MUST be the first line inside head tag -->
<meta http-equiv='X-UA-Compatible' content='IE=edge' />
<script type='text/javascript'>var $THIS$ = {product:{v:"12.3.7.11",fingerprint:"12.3.7.11.00644d5485eee21d3ed417e51adff961c6dee813",whoami:"Central Analysis Server 12.3.7 (build 19)",app:"rtm"},user:{lang:"en",user:null}}</script>
...
/ 2 / source codes:
package com.xxxxx.xxxxx.extractdata;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
public class DataMain {
public static void main(String[] args) {
CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("xxxxx", "xxxxx");
provider.setCredentials(new AuthScope(new HttpHost("10.96.1.232", 80, "http")), credentials);
HttpClient httpclient = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).build();
try {
// specify the host, protocol, and port
HttpHost target = new HttpHost("10.96.1.232", 80, "http");
// specify the get request
//String url= "/LSServlet?dmiAction=Generate&lsAction=LoadByName&lsEntryName=Application%20Health%20Status";
String url = "/index";
HttpGet getRequest = new HttpGet(url);
System.out.println("executing request to " + target);
HttpResponse httpResponse = httpclient.execute(target, getRequest);
HttpEntity entity = httpResponse.getEntity();
System.out.println("----------------------------------------");
System.out.println(httpResponse.getStatusLine());
Header[] headers = httpResponse.getAllHeaders();
for (int i = 0; i < headers.length; i++) {
System.out.println(headers[i]);
}
System.out.println("----------------------------------------");
if (entity != null) {
System.out.println(EntityUtils.toString(entity));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}