播客 > 玩代码  >  Java获取URL的内容  | 登录  | RSS订阅地址  | Code平台

Java获取URL的内容

  Java的网络资源比较少,问GG问的比较失败啊,自己在不断的摸索中才知道了不少。
  Java获取URL内容的,我这里只给出GET方式的,POST和其它方式的都是比较类似的。其技术要点就一下三点。
  第一:创建HttpURLConnection
  第二:打开URL,创建一个InputStream
  第三:逐行(逐字节)读取,如果需要,转换编码,放入字符串。

  好,一下就开始代码吧:
public String getUrlContent(String path){
        String rtn = "";
        int c;   
        try{
            java.net.URL   l_url   =   new   java.net.URL(path);   
            java.net.HttpURLConnection   l_connection   =   (java.net.HttpURLConnection)   l_url.openConnection();   
            l_connection.setRequestProperty("User-agent","Mozilla/4.0");
            l_connection.connect();   
            InputStream l_urlStream   =   l_connection.getInputStream(); 
            while   ((   (   c=   l_urlStream.read()   )!=-1)){  
                int   all=l_urlStream.available();   
                byte[]   b   =new   byte[all];   
                l_urlStream.read(b); 
                rtn+=   new   String(b,   "UTF-8");
            }   
                //Thread.sleep(2000);
            l_urlStream.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return rtn;
}



其中
l_connection.setRequestProperty("User-agent","Mozilla/4.0");
这句是必须的,很多服务器对于没有User-agent头的请求直接403了就。

然后采用InputStream.available()来一次性读取,返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数,如果需要的话,可以在后面稍微Sleep一下线程:
Thread.sleep(2000);


其中的
while   ((   (   c=   l_urlStream.read()   )!=-1)){  
                int   all=l_urlStream.available();   
                byte[]   b   =new   byte[all];   
                l_urlStream.read(b); 
                rtn+=   new   String(b,   "UTF-8");
            } 


是个很重要的读取过程,c表示读取流的标注,当结束的时候是-1,然后all是本次循环可用的最大字节数目,然后读取全部可用字节到byte[] b中,然后转换成UTF-8类型的字符串,注意,这里可以自己写方式,如果读取GB2312,就要写GB2312,至于有没有万能的,可以获取Meta,匹配下。自己想办法吧。


差不多就到了这里吧。
天气:微风,ccdot发表于2008-6-13 10:04:37,阅读了1103次,共有个0回复.

暂无评论

  1. 想要转载我文章的人滚远远的,能想多远,就滚多远。
  2. 不要提交任何带有网址URL信息的评论.
  3. 需要更多信息?请使用站内搜索,郁闷了?听听我在听什么吧!
用户名:*验证:看不清楚请点击刷新验证码*
内容: