При запросе всей страницы через модификацию в виде строки она возвращает не полностью проанализированный контент страницы - PullRequest
0 голосов
/ 08 июня 2019

Хотите проанализировать всю страницу из лазурного внутри приложения для Android.На данный момент, когда я пытаюсь разобрать html-страницу, в теле ответа я получаю только частично проанализированное тело.Кажется, что парсер не идет глубже, чем какой-то тег.

Код функции Android

private void retrofit2_1() {

        Interceptor interceptor = new Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {
                okhttp3.Request original = chain.request();

                String login = "login";
                String pass = "pass";

                String authToken = Credentials.basic(login, pass);

                okhttp3.Request request = original.newBuilder()
                        .header("Authorization", authToken)
                        .method(original.method(), original.body())
                        .build();

                return chain.proceed(request);
            }
        };

        OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(interceptor).build();

        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(ScalarsConverterFactory.create())
                .baseUrl("website")
                .client(okHttpClient)
                .build();

        ScalarService scalarService = retrofit.create(ScalarService.class);
        Call<String> stringCall = scalarService.getStringResponse("website");
        stringCall.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, retrofit2.Response<String> response) {
                if (response.isSuccessful()) {
                    String responseString = response.body();
                    System.out.println(responseString);
                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                System.out.println(t.getMessage());
            }
        });
    }

    interface ScalarService {
        @GET()
        Call<String> getStringResponse(@Url String url);
    }

Код тела ответа Внутри вы можете увидеть тег, который является последним проанализированным, так что он сделалзайдите внутрь этого

<!DOCTYPE html>

<html lang="en">
<head>

    <base href="/" />

    <title>Loading...</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <link href="/Content/npm.css/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="/Content/site.css/sb-admin.css" rel="stylesheet" />
    <link href="/Content/npm.css/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
    <link href="/Content/site.css/custom.css" rel="stylesheet">


    <script src="/Scripts/npm.js/core-js/client/shim.min.js"></script>
    <script src="/Scripts/npm.js/zone.js/dist/zone.min.js"></script>
    <script src="/Scripts/npm.js/systemjs/dist/system.js"></script>
    <script src="/Scripts/site.js/systemjs.config.js"></script>

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->


</head>
<body>
    <div id="wrapper">
        <!-- Navigation -->
        <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="/">Title</a>

            </div>
            <!-- Top Menu Items -->
            <ul class="nav navbar-right top-nav" >
                <li class="dropdown" userinfo>
                </li>
            </ul>
            <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
            <div id="cl" class="collapse navbar-collapse navbar-ex1-collapse">
                <sidebar></sidebar>
            </div>
            <!-- /.navbar-collapse -->
        </nav>

        <div id="page-wrapper">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-md-12">
                        <pagecontent></pagecontent>
                    </div>
                </div>
            </div>
        </div>

    </div>
    <script>
        System.import("bootstrap");
        System.import("jsplumb");
        System.import("app");
    </script>
</body>
</html>

Я ожидал, что полностью разобранная страница в теле ответа Может быть, мне нужно изменить какой-то параметр, который контролирует, насколько глубоко должен идти парсер, но не нашел в документах Одна вещь, которую я нашел, этоон должен выдавать исключение, если содержимое слишком велико, но у меня нет таких исключений

1 Ответ

0 голосов
/ 15 июня 2019

1.Предположим, вы можете попробовать поиграть с конфигурацией OkHttp3.Попробуйте увеличить время ожидания.Вот документация .По умолчанию время ожидания чтения составляет 10 секунд.

2.Другое предположение заключается в том, что вы выбираете исходный код страницы до его полной загрузки.По крайней мере, <title>Loading...</title> выглядит действительно подозрительно.В этом случае чтение тела как буферизованного потока должно помочь.Подробности смотрите в исходном коде ResponseBody .

PS В целом было бы полезно, если бы вы могли предоставить более подробную информацию - какой Parser использует?Например, у Jsoup есть предел загрузки, который можно увеличить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...