`

一个Java访问网页时URL重定向的问题

阅读更多

这是去年年底一直想解决的问题(这么简单的问题,现在才解决,说出来有点丢人,唉。。。)。昨天终于知道怎么解决了,原来是就是用了HttpURLConnection类的getHeaderField("location");方法。然后就是简单而又繁琐的拼接URL了,下面是我的项目中自己写的一个方法,大家见笑了。。。

 

public static Entity_Page DownLoadContent(String str) {
//    System.out.println(" str : " + str);
    Entity_Page page = new Entity_Page();
    String content = null;
    URL url = null;
    BufferedReader br = null;
    HttpURLConnection conn = null;
    InputStream is = null;
    String encode = null;
    boolean judge = false;
    String title = "";
    int responsecode;
    StringBuffer sb = null;
    try {
      str = ToChinese(str);
      url = new URL(str);
      conn = (HttpURLConnection) url.openConnection();
//      HttpURLConnection.setFollowRedirects(true);
      conn.setFollowRedirects(true);
      conn.setRequestMethod("GET");
      conn.setRequestProperty("User_Agent",
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
      conn.connect();
      responsecode = conn.getResponseCode();
      if (responsecode == 200) {
        is = conn.getInputStream(); //error
        encode = GetEncode(url); //得到该页面的编码
        br = new BufferedReader(new InputStreamReader(is, encode));
        sb = new StringBuffer();
        String line = "";
        while ( (line = br.readLine()) != null) {
          sb.append(line);
        }
        content = sb.toString();
        page.encode = encode; //该网页的编码方式
        page.content = content; //该网页的内容
        page.title = title;
        page.seed = str;
//        page.judge = judge; //是否为完整的网页
      }
      else if (responsecode == 300 || responsecode == 301 ||
               responsecode == 302 || responsecode == 304) {
        String s = str.substring(7);
        String u = null;
        if (s.indexOf('/') != -1) {
          u = "http://" + s.substring(0, s.indexOf('/')) +
              conn.getHeaderField("location");
//          System.out.println("11========== : " + u);
        }
        else {
          u = "http://" + s + conn.getHeaderField("location");
//          System.out.println("22========== : " + u);
        }

        URL uu = new URL(u); //u为最终重定向后的URL
        conn = (HttpURLConnection) uu.openConnection();
        conn.connect();
        InputStream stream = conn.getInputStream();
        encode = GetEncode(uu);
        br = new BufferedReader(new InputStreamReader(stream, encode));
        sb = new StringBuffer();
        String line = "";
        while ( (line = br.readLine()) != null) {
          sb.append(line);
        }
        content = sb.toString();
        page.encode = encode; //该网页的编码方式
        page.content = content; //该网页的内容
        page.title = title;
        page.seed = u; //设置重定向后的URL
      }
      else {
        System.err.println("Connection error : " + responsecode + "  " +
                           url);
        return null;
      }
    }
    catch (Exception ex) {
//      System.out.println("?????????  " + url);
//      ex.printStackTrace(); ////////////需要处理
      System.err.println("Connection timed out : " + url);
    }
    finally {
      try {
        if (sb != null) {
          sb = null;
        }
        if (br != null) {
          br.close();
          br = null;
        }
        if (is != null) {
          is.close();
          is = null;
        }
        if (conn != null) {
          conn.disconnect();
          conn = null;
        }
      }
      catch (IOException ex1) {
        ex1.printStackTrace();
      }
    }
    return page;
  }

 

网上查资料时,都说用HttpClient好使,但我没试验成功。。。还得继续努力呀。。。

分享到:
评论

相关推荐

    java 使用URL访问网页

    以下是一个简单的示例,演示如何使用`URL`类打开一个网页: ```java import java.net.*; public class NetDemo_7 { public static void main(String[] args) throws MalformedURLException, IOException { // ...

    java使用HttpURLConnection获取百度搜狗360搜索链接重定向真实目标链接地址url

    本人原创测试了百度,搜狗,360搜索都可以获取重定向后的真实地址,直接运行就可以,也可以根据自己项目具体修改功能。java使用HttpURLConnection获取百度搜狗360搜索链接重定向真实目标链接地址url。

    java 版Url转换工具,可得到真实的URL

    2. **重定向处理**:在Web服务中,URL重定向是常见的现象,当访问一个URL时,服务器可能会返回301或302状态码,引导浏览器或客户端去访问另一个URL。这个工具能够跟踪这些重定向,直到获取到最终的目标URL。 3. **...

    java禁止直接url访问图片

    当用户通过浏览器或其他客户端工具输入一个URL来访问图片时,实际上是发送了一个HTTP GET请求到服务器。服务器接收到请求后,根据请求的URL路径查找对应的资源,如果是图片,则返回HTTP响应,其中包含状态码(如200...

    java servlet请求转发重定向

    重定向是一种让浏览器重新发起一个新请求的技术。它通过修改客户端的URL来实现页面跳转,通常用于实现跨域跳转。 **特点:** - **地址栏变化:** 使用重定向时,浏览器地址栏中的URL会变更为重定向后的URL。 - **新...

    java 如何对网页进行重新定向

    在Java编程语言中,对网页进行重新定向是Web开发中的一个常见操作,主要涉及服务器端的处理。这通常用于登录验证、错误处理、URL重写等场景。在本篇文章中,我们将深入探讨如何使用Java来实现这个功能。 首先,我们...

    请求重定向个请求分派

    请求重定向是指将客户端的请求重新定向到另一个 URL 的过程。这个过程通过 HttpServletResponse 接口提供的 sendRedirect() 方法实现。sendRedirect() 方法将生成 302 响应码和 Location 响应头,从而通知客户端去...

    采集需要登录后的网页(重定向后cookie丢失问题)(

    ### 采集需要登录后的网页(重定向后Cookie丢失问题) 在网络爬虫开发过程中,经常会遇到需要登录后才能访问的目标网站。这些网站为了保护用户隐私和数据安全,通常会在用户通过身份验证后设置Cookie来保持登录状态...

    java内部重定向死循环检例子

    内部重定向是服务器在处理请求时,将请求转发到另一个资源,而这个过程对用户来说是透明的,浏览器的URL不会改变。这种技术常用于实现业务逻辑的分层或者在不同控制器之间传递信息。 死循环,顾名思义,是指程序...

    html如何在刷新网页面时重定向跳转到另一个网页或网站域名.纯前端代码,无需后台JAVA,PHP配合

    在HTML中实现页面刷新时重定向到另一个网页或网站域名,主要是通过两种方式来完成:Meta刷新和JavaScript。这两种方法都是纯前端技术,无需后台语言如JAVA或PHP的配合。 一、Meta刷新重定向 Meta刷新是HTML元元素...

    SpringCloud URL重定向及转发代码实例

    Spring Cloud URL重定向及转发代码实例是Spring Cloud框架中一个重要的知识点,本文将详细介绍Spring Cloud URL重定向及转发代码实例的使用方法和示例代码。 一、重定向(Redirect) 重定向是指将用户的请求从一个...

    详解Java从后台重定向(redirect)到另一个项目的方法

    Java后台重定向到另一个项目的方法是Java开发中一个常见的问题,本文将详细介绍三种常用的方法,帮助开发者快速解决问题。 方法一:使用ModelAndView跳转 在Spring MVC框架中,可以使用ModelAndView对象来实现...

    javaServlet请求转发和重定向.pdf

    * 请求转发过程结束后,浏览器地址栏保持初始的 URL 地址不变,而 sendRedirect() 方法重定向的访问过程结束后,浏览器地址栏中显示的 URL 会发生改变,由初始的 URL 地址变成重定向的目标 URL。 * forward() 方法的...

    请求转发与重定向

    执行此行代码后,服务器会向客户端发送一个302状态码和新的URL,客户端浏览器接收到此响应后会自动访问新的URL。 ##### 3. 工作原理 当执行 `sendRedirect` 方法时,服务器端会返回一个带有新URL的响应给客户端,...

    (301重定向)urlrewritefilter-4.0.3

    在IT行业中,URL重定向是一种常见的...它的灵活性和易用性使其成为开发者在处理URL重定向需求时的首选方案。通过理解其工作原理和配置方法,你可以有效地管理和优化网站的URL结构,提升用户体验和搜索引擎的友好度。

    java中的url重写

    Java 中的 URL 重写是一种常用的技术,它可以将原始的 URL 转换为另一个 URL,以便达到特定的目的。例如,隐藏真实的 URL、实现 URL 的加密、实现 URL 的重定向等。在 Java 中,有多种方式可以实现 URL 重写,包括...

    Java中如何使用Response重定向

    重定向是指将用户的请求从一个页面转移到另一个页面的过程。在Java中,可以使用Response对象的setStatus()方法和setHeader()方法来实现重定向。 setStatus()方法用于设置响应的状态码,例如302表示临时重定向。set...

    一个基于struts的重定向和转发实例

    4. 如果选择了重定向,浏览器将发起新的请求到指定的URL,可能是另一个Action,以处理登录后的操作。 5. 若选择转发,服务器会直接将请求传递给一个内部资源,如JSP页面,而用户在浏览器中看到的仍然是原始的登录URL...

    java web-转发、重定向(csdn)————程序.pdf

    - **原理**:重定向则是让客户端浏览器发起一个新的HTTP请求,访问服务器指定的新URL。服务器通过`Response`对象的`sendRedirect()`方法告诉浏览器跳转到新的URL。 - **特点**: - 请求URL改变,浏览器会显示新的...

Global site tag (gtag.js) - Google Analytics