比如有这样一个地址:
http://www.vckbase.com/tools/downtools.asp?id=209
用下载工具打开时,能够知道其真实的下载地址和下载名称
请问用java怎么能获取到真实的下载地址和名称呢?
我试了使用java.net.HttpURLConnection类,获取到了以下文件头信息
============getHeaderField()===============
openConnection.getContentLength()=3383
Date=Wed, 14 Apr 2010 08:39:00 GMT
Content-Length=3383
Expires=null
Last-Modified=null
Accept-Ranges=null
Connection=null
Content-Type=text/html
Server=Microsoft-IIS/6.0
Cache-Control=private
ETag=null
Location=null
openConnection.getURL().getFile()=/tools/viewtools.asp?id=209
openConnection.getURL().getQuery()=id=209
openConnection.getURL().getUserInfo()=null
openConnection.getURL().getPath()=/tools/viewtools.asp
openConnection.getURL().getProtocol()=http
openConnection.getURL().getAuthority()=www.vckbase.com
openConnection.getURL().getRef()=null
openConnection.getURL().toExternalForm()=http://www.vckbase.com/tools/viewtools.asp?id=209
===========================================
输出的信息中都没有真实的下载地址,请问如何能获得到呢?那些下载工具(flashget、迅雷等)又是如何做到的呢?

解决方案 »

  1.   

    conn.addRequestProperty("referer", "http://www.vckbase.com");
      

  2.   

    LZ举这个例子http://www.vckbase.com/tools/viewtools.asp?id=209 我用了浏览器打开是个网页。如果真有下载。我的迅雷会弹出下载对话框的。针对你所说的用java解析下载文件地址和文件名。看这个地址:http://41.dc.ftn.qq.com/ftn_handler/741dd3c731a10fb49152e35da5ded5c32dab9907ef047317d91110099c32042bc40c20588a80612d45c01d5cd92588abe9b520e05d45838b61642af532b31cb2/%E7%94%B5%E5%BD%B1%E5%8F%91%E8%A1%8C%E7%BD%91.City.Under.Siege.2010.DVDSCR.....avi?k=57643 
    用URLDecoder这个类来解析下载链接就会得到:http://41.dc.ftn.qq.com/ftn_handler/741dd3c731a10fb49152e35da5ded5c32dab9907ef047317d91110099c32042bc40c20588a80612d45c01d5cd92588abe9b520e05d45838b61642af532b31cb2/电影发行网.City.Under.Siege.2010.DVDSCR.....avi?k=57643
    这里的k=57643就应该是服务器里对应的影片名《周星驰莫少聪经典大片《龙凤茶楼》DVD中字.RMVB》
    这就像我们删除WEB程序的一条数据时。看到的只是http://fd.ds.w/wef?id=1 而实际删除的是id=1所对应的数据迅雷里面的下载链接是将下载路径通过某种编码方式编码的。我们一般看到的只是一连串的字符。 
    你点击用迅雷下载的文件右击其属性就会看到起真实的下载链接和文件名。
    获取文件名:添加常用文件的扩展名到一个数组中。通过文件扩展名来匹配连接。再截取匹配扩展名前面的第一个"."和"/"之间的字符串就是文件名。至于迅雷等这些下载软件是怎么知道下载地址和下载文件名。我想只需将网络资源数据库与迅雷服务器之间有联结就可以获取。只是我的个人想法,希望能帮到你。
      

  3.   

    这是URLDecoder的用法:
    String fileRealPath = URLDecoder.decode("http://41.dc.ftn.qq.com/ftn_handler/741dd3c731a10fb49152e35da5ded5c32dab9907ef047317d91110099c32042bc40c20588a80612d45c01d5cd92588abe9b520e05d45838b61642af532b31cb2/%E7%94%B5%E5%BD%B1%E5%8F%91%E8%A1%8C%E7%BD%91.City.Under.Siege.2010.DVDSCR.....avi?k=57643","UTF-8"); 
    System.out.println(fileRealPath);
      

  4.   

    http://dl5.csdn.net/fd.php?i=993340060698035&s=1ba8b65b345febb34deb2819943b6d54这是一个csdn下载文件的链接,怎么解析出真确的下载地址呢,我试了urldecode,没用,请指教。