我正在使用Java代码从Internet下载文件并将其保存到某个目录。
但是,代码会下载页面的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 :(得分:0)
我认为目标网址会执行一些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
答案 1 :(得分:0)
我将网站托管服务商切换为this one,现在上面的代码按预期工作。
答案 2 :(得分:-1)