`

java 模拟浏览器访问网页(转)

阅读更多
java 模拟浏览器访问网页
2009-12-04 14:54

正文:

在用Java的HttpURLConnection 来下载网页,发现访问google的网站时,会被google拒绝掉。

        try
         {
             url = new URL(urlStr);
             httpConn = (HttpURLConnection) url.openConnection();
             HttpURLConnection.setFollowRedirects(true);

 

             // logger.info(httpConn.getResponseMessage());
             in = httpConn.getInputStream();
             out = new FileOutputStream(new File(outPath));

             chByte = in.read();
             while (chByte != -1)
             {
                 out.write(chByte);
                 chByte = in.read();
             }
         }
         catch (MalformedURLException e)
         {
          }
         }



经过一段时间的研究和查找资料,发现是由于上面的代码缺少了一些必要的信息导致,增加更加详细的属性

             httpConn.setRequestMethod("GET");
             httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");

完整代码如下:
    public static void DownLoadPages(String urlStr, String outPath)
     {
         int chByte = 0;
         URL url = null;
         HttpURLConnection httpConn = null;
         InputStream in = null;
         FileOutputStream out = null;

         try
         {
             url = new URL(urlStr);
             httpConn = (HttpURLConnection) url.openConnection();
             HttpURLConnection.setFollowRedirects(true);
             httpConn.setRequestMethod("GET");
             httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
            
             // logger.info(httpConn.getResponseMessage());
             in = httpConn.getInputStream();
             out = new FileOutputStream(new File(outPath));

             chByte = in.read();
             while (chByte != -1)
             {
                 out.write(chByte);
                 chByte = in.read();
             }
         }
         catch (MalformedURLException e)
         {
             e.printStackTrace();
         }
         catch (IOException e)
         {
             e.printStackTrace();
         }
         finally
         {
             try
             {
                 out.close();
                 in.close();
                 httpConn.disconnect();
             }
             catch (Exception ex)
             {
                 ex.printStackTrace();
             }
         }
     }

此外,还有第二种方法可以访问Google的网站,就是用apache的一个工具HttpClient 模仿一个浏览器来访问Google

         Document document = null;
         HttpClient httpClient = new HttpClient();
        
         GetMethod getMethod = new GetMethod(url);
         getMethod.setFollowRedirects(true);
         int statusCode = httpClient.executeMethod(getMethod);
        
         if (statusCode == HttpStatus.SC_OK)
         {
             InputStream in = getMethod.getResponseBodyAsStream();
             InputSource is = new InputSource(in);

             DOMParser domParser = new DOMParser();    //nekoHtml 将取得的网页转换成dom
             domParser.parse(is);
             document = domParser.getDocument();
            
             System.out.println(getMethod.getURI());
            
         }
         return document;

推荐使用第一种方式,使用HttpConnection 比较轻量级,速度也比第二种HttpClient 的快。

 

 

转载一些代码,使用HttpUrlConnection来模拟ie form登陆web:


关于java模拟ie form登陆web的问题

HttpURLConnection urlConn=(HttpURLConnection)(new URL(url).openConnection());
urlConn.addRequestProperty("Cookie",cookie);
urlConn.setRequestMethod("POST");
urlConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
urlConn.setFollowRedirects(true);
urlConn.setDoOutput(true); // 需要向服务器写数据
urlConn.setDoInput(true); //
urlConn.setUseCaches(false); // 获得服务器最新的信息
urlConn.setAllowUserInteraction(false);
urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
urlConn.setRequestProperty("Content-Language","en-US" );
urlConn.setRequestProperty("Content-Length", ""+data.length());

DataOutputStream outStream = new DataOutputStream(urlConn.getOutputStream());
outStream.writeBytes(data);
outStream.flush();
outStream.close();

cookie=urlConn.getHeaderField("Set-Cookie");
BufferedReader br=new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"gb2312"));

 

 

个人签名

-------------------------------------

 

图盾 淘宝保护 保护图片 图片防盗

分享到:
评论
1 楼 yanghaitao 2014-09-05  
如果,我网页上有个访问统计脚本。比如CNZZ的统计脚本:<script src="http://s13.cnzz.com/z_stat.php?id=1253188722&web_id=1253188722" language="JavaScript">。 以上方法访问网页后,CNZZ系统能统计到你的访问么? 这个怎么实现???

相关推荐

    java模拟浏览器访问网站

    用java模拟访问浏览网站的代码,可以输出各种网页属性,以及html源代码

    java模拟微信浏览器访问.rar

    这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们可以推测这是一个Java程序,用于模拟微信内置浏览器的行为。下面将详细介绍这个主题的相关知识点。 1. **Java HTTP ...

    java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

    在Java编程中,有时我们需要模拟浏览器发送HTTP请求,例如调用外部接口或API。`HttpURLConnection`是Java标准库提供的一种轻量级的HTTP客户端,它允许我们在后台代码中发送GET和POST请求。本篇文章将深入讲解如何...

    java模拟浏览器

    java模拟浏览器发出请求并接收响应,可以传入请求方式、传入参数,并指定编码,注意引入apache-commons的jar包,

    JAVA-用HttpClient来模拟浏览器GET,POST.docx

    JAVA使用HttpClient模拟浏览器GET、POST请求 在本文中,我们将介绍如何使用Apache Commons HttpClient库来模拟浏览器的GET和POST请求。HttpClient库是一个开放源码的项目,是Apache Commons项目的一部分,旨在简化...

    Java 模拟cookie登陆简单操作示例

    当用户访问某个网站时,该网站可能会将 Cookie 信息写入到用户的浏览器中,以便下次用户访问该网站时能够快速识别用户的身份。 为什么需要模拟 Cookie 登陆? 在实际开发中,我们可能需要模拟用户的登陆行为,以便...

    Java使用默认浏览器打开指定URL的方法(二种方法)

    方法二: 代码如下://判断当前系统是否支持Java AWT Desktop扩展 if(java.awt.Desktop.isDesktopSupported()){ try{ //创建一个URI实例,注意不是URL java.net.URI uri=java.net.URI.create(“//www.j

    Java后台打开浏览器所用到的jar包

    在Java开发中,有时我们需要在后台程序中执行一些与用户界面交互的任务,比如自动打开一个网页。这个过程可以通过调用特定的库来实现,而"Java后台打开浏览器所用到的jar包"就是这样一个工具。这个jar包包含了必要的...

    java模拟ie 访问web

    当我们通过浏览器访问一个网页时,实际上是向服务器发送了一个HTTP请求,服务器接收到请求后返回相应的HTTP响应,包含网页的HTML内容。 在Java中,Apache HttpClient是一个强大的库,它可以让我们方便地模拟浏览器...

    java编写浏览器接口

    你可以用它们来创建窗口、按钮、文本框等元素,模拟浏览器的基本布局。 2. **URL和URLConnection**:Java的`java.net`包提供了处理URL的基础工具。`URL`类用于表示统一资源定位符,`URLConnection`则用于打开与URL...

    JAVA模拟网页发送请求

    ### JAVA模拟网页发送请求 #### 一、概述 在日常的开发工作中,有时我们需要通过程序自动地访问某个网站并获取其内容,或者模仿用户的行为进行登录等操作。这些需求可以通过模拟HTTP请求的方式实现。本篇文章将...

    java获取浏览器代理设置

    在Java编程中,获取浏览器的代理设置是一项重要的任务,特别是在开发网络应用或者需要模拟用户网络环境的场景下。本文将详细讲解如何利用Java来获取浏览器的代理设置,并结合提供的文件`registry.jar`和`ICE_...

    运用java实现简单的浏览器功能

    通过以上步骤,我们可以使用Java和NETBEANS创建一个基础的浏览器,它能浏览网页,执行前进和后退操作。然而,要实现更高级的功能,如书签、多标签页、搜索框等,还需要进一步的学习和开发。Java的灵活性和强大性使得...

    网页浏览器 模拟网页浏览器

    网页浏览器是互联网交互的核心工具,它允许用户在万维网上浏览、搜索和访问各种信息资源。这个名为"WebBrowser"的项目,据描述是用Java编程语言实现的一个实验性浏览器,旨在提供基本的网页浏览功能。Java作为一种跨...

    JAVA框架技术实验内容_HotJava浏览器_java_appletweb_

    浏览器的这一特性使得用户能够直接在网页上体验到动态加载和执行的Java代码,增强了Web的交互性和功能性。 实验内容可能包括以下几个方面: 1. **理解Java Applet生命周期**:学习如何定义applet的初始化、启动、...

    模拟浏览器操作

    在IT领域,模拟浏览器操作是一项重要的技术,尤其在自动化测试、网页抓取和网络应用的开发中。数据结构课程设计中的“模拟浏览器操作”通常涉及使用编程语言来重现用户在真实浏览器上的行为,如前进、后退、加载URL...

    用HttpClient来模拟浏览器GET POST

    不过你可能在某些时候需要通过程序来访问这样的一些页面,比如从别人的网页中“偷”一些数据;利用某些站点提供的页面来完成某种功能,例如说我们想知道某个手机号码的归属地而我们自己又没有这样的数据,因此只好...

    java 使用URL访问网页

    在Java编程语言中,访问网页是一项基本操作,通常用于数据抓取、自动化测试或网络通信。本篇文章将详细讲解如何使用Java的内置类`java.net.URL`和相关API来实现这个功能。 首先,我们需要理解`URL`(Uniform ...

    java+selenium实现自动化打开页面的方法

    这个Java代码使用Selenium工具打开了Firefox浏览器,并访问了百度首页,然后输入了搜索关键字“安居客”,最后点击了搜索按钮。 四、自动化测试的重要性 自动化测试对于软件开发和质量保证来说非常重要。它可以提高...

Global site tag (gtag.js) - Google Analytics