2016-05-28 1 views
1

У меня есть следующий код, который, как ожидается, вернет весь контент html-файла, загруженный с .OkHttp/Android не возвращает полные результаты

(код находится в Xtend, но я думаю, что это не имеет значения).

var html = try { 
     var client = new OkHttpClient() 
     var request = new Request.Builder() 
         .url("http://developer.android.com/") 
         .build() 
     var response = client.newCall(request).execute() 

     response.body.string 
    } catch(IOException err) { 
     e("HTML error", err.toString) 
     return 
    } 

    Log.d("HTML", html) 

Выход был отрезан после нескольких строк html.

<!DOCTYPE html> 
<html lang="en"> 
<head> 




<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"> 
<meta content="IE=edge" http-equiv="X-UA-Compatible"> 
<meta name="description" content="The official site for Android developers. Provides the Android SDK and documentation for app developers and designers."> 
<meta name="xsrf_token" content="A3XCSylWU7AR4OhsL_yhMWlzbNcbh9Hk3Csw0HAUa5E6MTQ2NDQyMTgwNzE1MDQ0MA" /> 

<link rel="alternate" href="http://developer.android.com/index.html" hreflang="en"> 
<link rel="alternate" href="http://developer.android.com/index.html?hl=es" hreflang="es"> 
<link rel="alternate" href="http://developer.android.com/index.html?hl=id" hreflang="id"> 
<link rel="alternate" href="http://developer.android.com/index.html?hl=ja" hreflang="ja"> 
<link rel="alternate" href="http://developer.android.com/index.html?hl=ko" hreflang="ko"> 
<link rel="alternate" href="http://developer.android.com/index.html?hl=pt-br" hreflang="pt-br"> 
<link rel="alternate" href="http://developer.android.com/index.html?hl=ru" hreflang="ru"> 
<link rel="alternate" href="http://developer.android.com/index.html?hl=vi" hreflang="vi"> 
<link rel="alternate" href="http://developer.android.com/index.html?hl=zh-cn" hreflang="zh-cn"> 
<link rel="alternate" href="http://developer.android.com/index.html?hl=zh-tw" hreflang="zh-tw"> 

<title> 

    Android Developers 

</title> 

<!-- STYLESHEETS --> 
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto+Condensed"> 
<link rel="stylesheet" 
    href="//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold" 
    title="roboto"> 





<link href="/static/css/default.css?v=2016052807" rel="stylesheet" type="text/css"> 
<!-- JAVASCRIPT --> 
<script src="//www.google.com/jsapi" type="text/javascript"></script> 
<script src="https://developer.android.com/_static/23ecca3dc9/js/android_3p-bundle.js" type="text/javascript"></script> 


<script type="text/javascript"> 
    var toRoot = '/'; 
    var metaTags = ""; 
    var devsite = true; 
    var useUpdatedTemplates = true; 
    var devsiteLang = 'en'; 
    var pageType = 'none'; 
    var ANDROID_LANGUAGES = [ 


     'en','es','in','ja','ko','pt-br','ru','vi','zh-cn','zh-tw' 

    ]; 
</script> 
<script src="/static/js/docs.js?v=2016052807" type="text/javascript"></script> 


<script> 
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 
    ga('create', 'UA-5831155-1', 'android.com'); 
    ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'}); // New tracker); 
    ga('send', 'pageview'); 
    ga('universal.send', 'pageview'); // Send page view for new tracker. 
</script> 


</head> 

<body class="gc-documentation none None full-width" itemscope itemtype="http://schema.org/Article"> 
    <a href="#top" id="skip-to-main">Skip to content</a> 
    <header id="header-wrapper"> 
    <div class="dac-header" id="header"> 
     <div class="dac-header-inner"> 
     <a class="dac-nav-toggle" data-dac-toggle-nav href="" title="Open navigation"> 
      <span class="dac-nav-hamburger"> 
      <span class="dac-nav-hamburger-top"></span> 
      <span class="dac-nav-hamburger-mid"></span> 
      <span class="dac-nav-hamburger-bot"></span> 
      </span> 
     </a> 

     <a class="dac-header-logo" href="https://developer.android.com/index.html"> 
      <img class="dac-header-logo-image" src="https://developer.android.com/static/images/android_logo.png" 
       srcset="https://developer.android.com/static/images/android_logo_2x.png 2x" 
       width="32" height="36" alt="Android"> Developers</a> 
     <ul class="dac-header-tabs"> 
      <li> 
      <a class="dac-header 

Я попытался с помощью UrlConnection как хорошо, но результат не отличается. Это проверено на самом устройстве (Samsung Galaxy Note 10.1 работает с неофициальным Cyanogen Mod) и AVD (Atom x64 с Android 6.0).

Я также пробовал с горсткой URL-адреса, и результаты совершенно одинаковы (ответ отключается где-то).

Я не знаю, что мне делать дальше. Можете ли вы предложить?

ответ

0

некоторые из данных загружается после страницы JavaScript фактически загружается в браузере) скачать JavaScripts и анализировать их)

+0

Ну, да, некоторые из них - AJAX, и им потребуется JS для их динамического загрузки после этого. Однако в моем случае он даже не загружает страницу полностью (и нет никаких ошибок). –

0

Попробуйте это:

public static String readResponseBody(Response response) throws IOException { 
    BufferedReader reader = new BufferedReader(response.body().charStream());; 
    StringBuilder stringBuilder = new StringBuilder(); 
    while (true) { 
     String line = reader.readLine(); 
     if (line == null) 
      break; 
     stringBuilder.append(line); 
    } 
    return stringBuilder.toString(); 
} 
+0

Результаты почти одинаковы. –

+0

Результат не может быть одинаковым. Убедитесь, что вы не вызываете response.body.string. Вместо этого вы должны позвонить readResponseBody (ответ) – nexus5x

+0

Как и в моем ответе ниже, я обнаружил, что функция фактически возвращает полное тело, но ADB не распечатывает полные результаты, поэтому я думал, что он был отрублен на полпути. Да, результаты будут не такими, как этот, не разбить строку на построитель строк (таким образом, она становится одной строкой). –

0

извиняется каждому участнику. Похоже, что библиотека/платформа работает так, как ожидалось. Вероятно, проблема заключается в DDMS.

Я пробовал читать весь html, а затем отображать последние несколько символов в DDMS (используя класс Log) и получается, что это закрывающий тег html </html>. Я уверен, что результаты вернутся в целом.

Но если я поместил всю строку в функции журнала, то ее обрубают около 4000 символов. Вероятно, границы буфера adb или что-то еще.