Используя HTTPClient для симуляции сетевого разговора, всегда получаю 401 несанкционированную ошибку - PullRequest
0 голосов
/ 01 марта 2019

У меня есть Dynatrace NAM продукт / веб-приложение.После входа в систему вручную, я могу выполнить следующие шаги с помощью мыши, чтобы экспортировать данные, отображаемые в браузере.

  1. войти в систему. http://10.96.1.232/
  2. нажмите Reports: URL-адрес http://10.96.1.232/index, который автоматически перенаправляет на http://10.96.1.232/LSServlet?dmiAction=Generate&lsAction=LoadByName&lsEntryName=Application%20Health%20Status
  3. click DMI: отчеты Data Mining: http://10.96.1.232/dashboard?_callUrl=menu_reports_dashboard
  4. click Servers: http://10.96.1.232/LSServlet?lsEntryName=Servers&dmiAction=Generate&pUtil_width_=1280&pUtil_height_=615&
  5. наконец нажмите 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();
        } 
    }
}
...