Я использую 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>
Почему это и как мне это исправить? Я уже пробовал различные библиотеки и методы для загрузки файлов, но все они дали такой же «ошибочный» результат.
Выберите лучший хост-файл. Тот, который вы используете, отказывается обслуживать файл до тех пор, пока не будет установлен какой-либо cookie (возможно, для аналитики). То, что вы видите, это код, который они доставляют браузеру, у которого еще нет cookie. Обратите внимание, если вы перейдете по этой ссылке в приватном браузере, он перенаправляет (используя этот код, который вы видите) и добавляет '? Ckattempt = 1' до конца. – Matt
@Matt: Я заметил, что браузер перенаправлен, но я не знал, что с ним делать, чтобы программно загрузить файл – BullyWiiPlaza
Решение: выберите лучший файловый хост. Тот, который вы выбрали, требует отслеживания аналитики, прежде чем он доставит файл. Программная загрузка файла означает, что Java является «браузером» в вашем случае, и он A) не имеет файлов cookie, которые имеет ваш браузер, и B) не может выполнить JavaScript для создания этого файла cookie. Только браузер может удовлетворять требованиям этого файла. Они активно блокируют cURL (на '403), и вам нужно загружать зависимости (' aes.js'), прежде чем вы сможете даже выполнить свой сценарий аналитики. Попробуйте лучший хост, например, страницы GitHub или что-то. – Matt