依据URL下载网页源代码

根据URL下载网页源代码
本帖最后由 qinfenziqiang 于 2014-10-19 17:34:31 编辑
import java.net.*;
import java.io.*;

public class GetHtml {
public static void main(String[] args){
     String readstring;
     try{
     URL root = new URL("http://www.baidu.com");
     BufferedReader dis = new BufferedReader(new InputStreamReader(root.openStream(), "utf-8"));
     while((readstring = dis.readLine()) != null){
     System.out.println(readstring);
     }
     }
     catch(MalformedURLException e){
     System.out.println(e);
     }
}
}


为什么我按上面程序执行后,控制台输出的字符和直接在网页上右键查看源代码的字符有区别??上面程序哪里需要修改呢?比如说,控制台和网页上的第一行就有区别,如图。
依据URL下载网页源代码依据URL下载网页源代码
------解决思路----------------------
看看你的浏览器发出的 HTTP 请求 HEADER 里都有什么,在代码里都加上,尤其是 User-Agent。
------解决思路----------------------
HTTP 请求由若干 HEADER 和一个 BODY 组成,HEADER 实际上是一个键值对,比如 Accept-Encoding:gzip,deflate,sdch 表示客户端可以接受 BODY 内容使用 gzip 或 deflate 或 sdch 算法压缩,服务器端就根据这个在响应的时候选择算法对 BODY 进行压缩。

User-Agent 的用处是告诉服务器客户端是什么类型的,服务器通过这个可以判断客户端是 FireFox 还是 Chrome,是 Windows 还是 Android,从而返回不同的网页内容。比如在手机上访问同样一个网站显示的内容比 PC 上要少很多,从而达到节省流量及更好地在小屏幕上显示的目的。

所以你在浏览器看到的网页和 JAVA 代码得到的网页是不一样的。
------解决思路----------------------
最近刚好在用这个,直接上代码,应该是你要的

URL url = new URL("http://www.baidu.com");
HttpURLConnection httpConn = (HttpURLConnection)url.openConnection();
httpConn.setRequestMethod("GET");
        InputStreamReader insr = new InputStreamReader(httpConn.getInputStream(),"utf-8");         
        int respInt = insr.read();
        StringBuffer content = new StringBuffer();        
        while (respInt != -1) {
         content.append((char) respInt);
            //System.out.print((char) respInt); 
            respInt = insr.read(); 
        }
System.out.println(content);
------解决思路----------------------
模仿浏览器   需要设置一些头域什么的