日期:2014-05-19  浏览次数:20746 次

下载网页的程序。。为何有的能下载,有的不行或不完全
最近编了一个下载网页的java程序,当输入http://www.baidu.com的时候能够下载,但当输入http://www.google.com的时候,为什么感觉没有完全下载下来(就是下载的网页不能完全显示)??求高手

import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class DownLoad {
public static void main(String[] args)
{
JFrame jf=new JFrame("DownLoad");
jf.setSize(600,400);
jf.setLocation(100,100);
JPanel jp=new JPanel();
JLabel jl=new JLabel("please input URL:");
final JTextField jtf=new JTextField(20);
jp.add(jl);
jp.add(jtf);
jf.getContentPane().add(jp,"North");
JButton jb=new JButton("下载");
final JTextArea jta=new JTextArea();
jf.getContentPane().add(jb,"South");
jf.getContentPane().add(jta,"Center");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
jb.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String str=jtf.getText();
//System.out.println(str);
try{
URL ul=new URL(str);
URLConnection ulc=ul.openConnection();
jta.append("Host:"+ul.getHost());
String line=System.getProperty("line.separator");
jta.append(line);
jta.append("Port:"+ul.getDefaultPort());
jta.append(line);
jta.append("Protocol:"+ul.getProtocol());
jta.append(line);
jta.append("Length:"+ulc.getContentLength());
InputStream is=ulc.getInputStream();
FileOutputStream fos=new FileOutputStream("1.html");
int data;
while(( data=is.read())!=-1)
{
fos.write(data);

}
fos.close();
is.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}

}

});
jf.show();


}

}


------解决方案--------------------
copy代码到本地执行了一下,开始是好的,没有啥问题

Length:7701Host:www.google.com
Port:80
Protocol:http

然后在www.google.com里面搜索 "胡萝卜" 之后,再运行LZ提供的小程序

Length:-1Host:www.google.com
Port:80
Protocol:http

就出现了问题.

原因是: "谷歌搜索,由于谷歌服务器在香港,可能导致搜索服务不稳定"

其实更底层的原因是因为我国强大的 "网络长城" 有强大的关键词过滤,例如上面说的 "胡萝卜",只要你输入这个关键词,在三分钟之内是不能够使用全球最牛叉的GOOGLE的.当时也是反对这个,GOOGLE才把服务器搬到了香港的.

相比而言,BAIDU这个太汉奸了.........