错误从给定的URL

问题描述:

我试图下载指定网址下载文件: http://www.addic7ed.com/original/9521/7错误从给定的URL

但是当我尝试使用我的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

您是否尝试过使用'HTTP:// www.addic7ed.com /原厂/ 9521/7'(带'http://'添加到前面)? – mellamokb

+0

是的,我试过,但html页面正在下载.. – RanRag

你有没有试过?

URL url = new URL("http://www.addic7ed.com/original/9521/7"); 
+0

是的,我试过,但html页面正在下载.. – RanRag

+1

我刚刚检查了链接,这是一个网页,这就是为什么你得到一个网页:) –

+0

但如何互联网下载管理器能够获取我真正想要下载的链接。它不是下载网页。它正在下载.SRT文件 – RanRag

你看过HTML文件吗?我怀疑它实际上是来自服务器的错误页面,并且它包含关于实际正在发生的事情的线索。

这里有一些可能性:

  • 也许你需要提供身份验证凭据。

  • 也许服务器发送一个重定向(3XX)响应,并且该客户端不执行重定向。

  • 也许你需要设置一些额外的头让服务器意识到,这不应该把响应为HTML。例如,一个Accept标头。

但请注意,细节取决于您要与之通话的服务器。


如果我试图下载程序中的Java文件,我想要么使用HttpUrlConnection或者Apache的HttpClient库。两者都会给你更多的控制下载过程,而不仅仅是简单地使用URL.openStream()

这可能是因为http://www.addic7ed.com/original/9521/7的http响应是你的java代码没有正确处理的302重定向。 IDM正确处理重定向。如果您使用的是基于* nix的系统,或者在Windows上安装了cygwin,则可以使用该工具。

卷曲-v http://myurl

将显示所有的HTTP流量信息(请求/响应)

+0

此外:您可能想要查看Apache Commons HTTPClient。我相信支持重定向开箱即用 –