日期:2014-05-20  浏览次数:20685 次

一个关于java获取URL源代码的问题
现在要做一个小程序对指定的url来获取其网页内容,当访问一般的页面是可以成功的得到其源代码。但是,当url为一个指定的文件时就不行,会发生错误。

例如:当url为 http://bbs.csdn.net/ 时,可以顺利得到页面代码
而 http://dota2.dl.wanmei.com/dota2/patch/night_stalker_basic.flv 就会出现错误 

请问怎么解决,谢谢了。。

程序如下

package com.wsw.j2se.url;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 通过网站域名URL获取该网站的源码
 * @author Administrator
 *
 */
public class HtmlRequest {
    /**
    * @param args
    * @throws MalformedURLException 
    */
    public static void main(String[] args) throws Exception    {
        URL url = new URL("http://dota2.dl.wanmei.com/dota2/patch/night_stalker_basic.flv"); 
        String urlsource = getURLSource(url);
        System.out.println(urlsource);
    }
    
    /**
     * 通过网站域名URL获取该网站的源码
     * @param url
     * @return String
     * @throws Exception
     */
    public static String getURLSource(URL url) throws Exception    {
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setRequestMethod("GET");
        conn.setConnectTimeout(5 * 1000);
        InputStream inStream =  conn.getInputStream();  //通过输入流获取html二进制数据
        byte[] data = readInputStream(inStream);        //把二进制数据转化为byte字节数据
        String htmlSource = new String(data);
        return htmlSource;
    }
    
    /**
     * 把二进制流转化为byte字节数组
     * @param instream
     * @return byte[]
     * @throws Exception
     */
    public static byte[] readInputStream(InputStream instream) throws Exception {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[]  buffer = new byte[1204];
        int len = 0;
        while ((len = instream.read(buffer)) != -1){
            outStream.write(buffer,0,len);
        }
        instream.close();
        return outStream.toByteArray();         
    }
}

------解决方案--------------------
你这个不是html 

http://dota2.dl.wanmei.com/dota2/patch/night_stalker_basic.flv
------解决方案--------------------
我自己运行了一下,出现的问题主要是你所运行的是一个文件下载链接,可能需要下载到本地解析,而bbs的那个就是一个网页,因此很轻松就显示出来
------解决方案--------------------
引用:
Quote: 引用:

你这个不是html 

http://dota2.dl.wanmei.com/dota2/patch/night_stalker_basic.flv


不是,有的.flv就可以处理,例如:
http://d1.sina.com.cn/201404/02/544161_600_450.flv

我觉得是因为这个.flv内容比较小(3M左右),而上一个内容比较大(20几M)。
但是我现在就算是想跳过这些大一点的文件也不知道怎么处理,求指点
视频的你怎么解析,全是乱码啊
------解决方案--------------------
conn.getContentLength();
------解决方案--------------------
取流数据和取代码是两回事
------解决方案--------------------
http://baojunhu99.iteye.com/admin/blogs/2046252