从给定的URL下载文件时出错

时间:2011-09-13 01:56:01

标签: java url java-api

我正在尝试下载给定的网址:  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可用于实现此目的。

3 个答案:

答案 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");