黑马程序员技术交流社区

标题: 问个URL问题 [打印本页]

作者: 谭荣强    时间: 2014-4-2 23:12
标题: 问个URL问题
老毕说这样能打开baidu,我的怎么没反应啊
import java.io.*;
import java.net.*;
class URLConnectionDemo
{
        public static void main(String[] args) throws Exception
        {
                URL url = new URL("http://www.baidu.com.cn");
                URLConnection uc = url.openConnection();/
        }
}
作者: leon_hm    时间: 2014-4-2 23:28
能打开,我试了,你把返回的字符打印出来看看就知道。
作者: 残梦共飞雪    时间: 2014-4-3 00:23
本帖最后由 残梦共飞雪 于 2014-4-3 00:25 编辑

能打开,但是你没有写任何输出语句。不带HTTP会有异常,facebook被墙,它才无法访问。

  1. public static void main(String[] args) throws Exception
  2.         {
  3.                 URL url = new URL("http://www.baidu.com.cn");
  4.                 URLConnection uc = url.openConnection();
  5.                 System.out.println("baidu:"+uc.getContentType());
  6.                 uc = new URL("http://facebook.com/").openConnection();
  7.                 System.out.println("facebook:"+uc.getContentType()); // 输出:facebook:null
  8.         }
复制代码


作者: Engle    时间: 2014-4-3 08:31
你这样写是看不出什么效果的,我把你的代码扩展下,
以get方式访问百度,并且抓取百度主页面html源代码

public static void main(String[] args) throws Exception
    {
            URL url = new URL("http://www.baidu.com.cn");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //以get方式访问百度,并将百度html页面的源码返回
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36");
                        int code = connection.getResponseCode();
                        if(code==200){
                                InputStream inputStream = connection.getInputStream();
                                try {
                                        ByteArrayOutputStream bos=new ByteArrayOutputStream();
                                        byte[] bs=new byte[1024];
                                        while((inputStream.read(bs, 0, bs.length))!=-1){
                                                bos.write(bs);
                                        }
                                        inputStream.close();
                                        byte[] byteArray = bos.toByteArray();
                                        String result=new String(byteArray);
                                        System.out.println(result);
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
    }

不得不说,真实开发的时候这种访问服务器的耗时操作,是要开启子线程来弄的。
作者: 谭荣强    时间: 2014-4-3 19:05
在看看 。
作者: 多一点    时间: 2014-4-3 21:10
本帖最后由 多一点 于 2014-4-3 21:12 编辑

你的代码改下加几行:
这样就能拿回百度服务器给你回来的信息    import java.io.*;
import java.net.*;

public class URLConnections {

        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {

                URL url = new URL("http://www.baidu.com");

                URLConnection uc = url.openConnection();
                System.out.println(uc);//协议sun.net.www.protocol.http.HttpURLConnection:http://www.baidu.com
                BufferedReader buffr=
                                new BufferedReader(new InputStreamReader(uc.getInputStream()));
                String line=null;
                while((line=buffr.readLine())!=null){//读取百度返回的信息
                        
                        System.out.println(line);
                }

        }

}


作者: 谭荣强    时间: 2014-4-6 19:57
多一点 发表于 2014-4-3 21:10
你的代码改下加几行:
这样就能拿回百度服务器给你回来的信息    import java.io.*;
import java.net.*;

拿到了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2