2016-01-19 6 views
0

Я использую Java-код для загрузки файла из Интернета и сохранения его в какой-то каталог.Загрузка HTML вместо файла

Однако код загружает исходный код страницы HTML вместо содержимого файла.

Приведенный ниже код иллюстрирует проблему:

import java.awt.*; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.net.URL; 
import java.nio.channels.Channels; 
import java.nio.channels.ReadableByteChannel; 

public class JavaFileDownloadTest 
{ 
    public static void download(String remoteURL, String targetFilePath) 
      throws IOException 
    { 
     URL downloadableFile = new URL(remoteURL); 
     ReadableByteChannel readableByteChannel = Channels.newChannel(downloadableFile.openStream()); 
     FileOutputStream fileOutputStream = new FileOutputStream(targetFilePath); 
     fileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE); 
    } 

    public static void main(String[] arguments) throws IOException 
    { 
     String userHome = System.getProperty("user.home"); 
     String fileName = "Test.txt"; 
     String targetFilePath = userHome + File.separator + "Downloads" + File.separator + fileName; 
     download("http://bullywiiplaza.cuccfree.com/" + fileName, targetFilePath); 
     Desktop.getDesktop().open(new File(targetFilePath)); 
    } 
} 

Файл расположен here содержит текст

Hello StackOverflow! 

Однако, при загрузке с использованием приведенного выше кода, я получаю HTML исходный код, вместо этого:

<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("ae71113e4baf38cee1c1aacf0ae66c00");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; document.cookie="referrer="+escape(document.referrer); location.href="http://bullywiiplaza.cuccfree.com/Test.txt?ckattempt=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html> 

Почему это и как мне это исправить? Я уже пробовал различные библиотеки и методы для загрузки файлов, но все они дали такой же «ошибочный» результат.

+0

Выберите лучший хост-файл. Тот, который вы используете, отказывается обслуживать файл до тех пор, пока не будет установлен какой-либо cookie (возможно, для аналитики). То, что вы видите, это код, который они доставляют браузеру, у которого еще нет cookie. Обратите внимание, если вы перейдете по этой ссылке в приватном браузере, он перенаправляет (используя этот код, который вы видите) и добавляет '? Ckattempt = 1' до конца. – Matt

+0

@Matt: Я заметил, что браузер перенаправлен, но я не знал, что с ним делать, чтобы программно загрузить файл – BullyWiiPlaza

+1

Решение: выберите лучший файловый хост. Тот, который вы выбрали, требует отслеживания аналитики, прежде чем он доставит файл. Программная загрузка файла означает, что Java является «браузером» в вашем случае, и он A) не имеет файлов cookie, которые имеет ваш браузер, и B) не может выполнить JavaScript для создания этого файла cookie. Только браузер может удовлетворять требованиям этого файла. Они активно блокируют cURL (на '403), и вам нужно загружать зависимости (' aes.js'), прежде чем вы сможете даже выполнить свой сценарий аналитики. Попробуйте лучший хост, например, страницы GitHub или что-то. – Matt

ответ

0

Я включил хост сайта в this one, и теперь код сверху работает так, как ожидалось.

0

Я думаю, что целевой URL-адрес выполняет некоторый javascript для предоставления файла. Этот скрипт должен быть интерпретирован (и выполнен) некоторым движком javascript.

Для того, чтобы получить реальный файл url (а не только javascript) или интегрировать некоторый механизм javascript, чтобы выполнить код сценария и получить результат, вам нужно либо определенное разрешение.

Я думаю, что это может помочь вам: Executing javascript in java - Opening a URL and getting links

или лучше:

http://www.java2s.com/Code/Java/JDK-6/ExecuteJavascriptscriptinafile.htm

+0

. Как вы использовали бы это, чтобы решить проблему с загрузкой нужного файла? – BullyWiiPlaza

+0

Возможно, мои ссылки были disleading, извините. Я думал, что скрипт enigne будет работать, но это только для выполнения сценария, который вы предоставляете. В этом случае я считаю, что очень сложно добиться того, чего вы хотите, потому что ваш провайдер блокирует доступ. См. Комментарий @ Matt на ваш вопрос. –

-1

http://bullywiiplaza.cuccfree.com/Test.txt не существует. Я думаю, что url должен быть https://bullywiiplaza.cuccfree.com/Test.txt, который существует.

+0

Извините, оба существуют, но используя 'https' throws a SSLHandshakeException' – BullyWiiPlaza

+0

Да, извините, вы правы. У вас есть aes.js, который перехватывает запрос и помещает параметр URL и получает страницу. Это не простая загрузка. –

Смежные вопросы