我正在尝试下载给定的网址:
http://www.addic7ed.com/original/9521/7
但是当我尝试使用我的Java代码下载文件时:
URL url = new URL("http://www.addic7ed.com/original/9521/7");
ReadableByteChannel rbc = Channels.newChannel(url.openStream());
FileOutputStream fos = new FileOutputStream("abc.srt");
fos.getChannel().transferFrom(rbc, 0, 1 << 24);
下载html page
,而要下载的文件应为.srt extension
文件。
但是当我尝试使用Internet Download Manager
下载上述链接时,文件会被下载。
IDM
将上面提到的网址转换为http://www.addic7ed.com/srtcache/Supernatural/Supernatural%20-%2004x06%20-%20Yellow%20Fever.720p%20CTU.English.orig.Addic7ed.com.srt
所以我的问题是如何在JAVA中实现这个...?是否有任何API可用于实现此目的。
答案 0 :(得分:2)
你看过HTML文件了吗?我怀疑它实际上是来自服务器的错误页面,并且它包含有关实际发生情况的线索。
以下是一些可能性:
也许您需要提供身份验证凭据。
也许服务器正在发送重定向(3xx)响应,并且客户端没有执行重定向。
也许您需要设置一些额外的标头,以使服务器意识到它不应该将响应转换为HTML。例如,Accept标头。
但请注意,详细信息取决于您尝试与之交谈的服务器。
如果我尝试用Java编程方式下载文件,我会使用HttpUrlConnection
或Apache HttpClient
库。与仅使用URL.openStream()
答案 1 :(得分:1)
这可能是因为来自http://www.addic7ed.com/original/9521/7的http响应是302重定向,您的java代码无法正确处理。 IDM正确处理重定向。如果您使用基于* nix的系统,或者在Windows上安装了cygwin,那么这是一个很棒的工具。
curl -v http://myurl
将显示所有http流量信息(请求/响应)
答案 2 :(得分:0)
你试过吗?
URL url = new URL("http://www.addic7ed.com/original/9521/7");