【问题标题】:Java HttpURLConnection avoid redirect and go to original pageJava HttpURLConnection 避免重定向并转到原始页面
【发布时间】:2016-05-07 11:13:23
【问题描述】:

我正在尝试从 urlA 获取数据,但我一直被从 urlA 重定向到 urlB

我收到响应代码 301(永久移动),但如果我使用任何浏览器(例如 Chrome、Firefox 甚至 Internet Explorer),我仍然可以转到 urlA 而不会被重定向。所以 urlA 仍然存在(浏览器不会从任何类型的缓存中加载它)并且如果您使用 Web 浏览器,它不会自动将用户重定向到 urlB。

如何强制使用 HttpURLConnection 的 Java 程序转到仍然存在的原始 urlA?

private StringBuffer getHTMLCode(String urlA) throws IOException {
    URL url = new URL(urlA);
    final String userAgent = "Mozilla/5.0";

    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setInstanceFollowRedirects(false);  // NO REDIRECT, if I set TRUE I will be redirected to urlB
    con.setRequestMethod("GET");
    con.setRequestProperty("User-Agent", userAgent);

    int responseCode = con.getResponseCode(); 
    System.out.println("\nSending 'GET' request to URL : " + url); // shows my original urlA
    System.out.println("Response Code : " + responseCode);  // <-- 301 moved permanently        

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    StringBuffer htmlCode = new StringBuffer();
    String inputLine;    

    while ((inputLine = in.readLine()) != null) {
        htmlCode.append(inputLine);
    }

    System.out.println(htmlCode);  // <head><title>Document Moved</title></head><body><h1>Object Moved</h1>This document may be found <a HREF="urlB">here</a></body>

    in.close();     
    return htmlCode;
}

【问题讨论】:

  • 如果你得到 301,你就没有被重定向。不清楚你在问什么。
  • 好的,但是,我没有从 urlA 获得原始 html 代码,而是 htmlCode 包含不同的 html 并带有文本说“可能找到此文档...”(请参阅上面我的代码中的最后一个 sysout)。这就是为什么我认为我被重定向了。我的问题是:如何获取 urlA 的 html 代码?

标签: java httpurlconnection http-redirect http-response-codes


【解决方案1】:

您要查找的代码可能是这个,它使用了 setInstanceFollowRedirects

private StringBuffer getHTMLCode(String urlA) throws IOException {
    URL url = new URL(urlA);
    final String userAgent = "Mozilla/5.0";

    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setInstanceFollowRedirects(false);  // NO REDIRECT, if I set TRUE I will be redirected to urlB
    con.setRequestMethod("GET");
    con.setRequestProperty("User-Agent", userAgent);
    con.setInstanceFollowRedirects(false);

    int responseCode = con.getResponseCode(); 
    System.out.println("\nSending 'GET' request to URL : " + url); // shows my original urlA
    System.out.println("Response Code : " + responseCode);  // <-- 301 moved permanently        

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    StringBuffer htmlCode = new StringBuffer();
    String inputLine;    

    while ((inputLine = in.readLine()) != null) {
        htmlCode.append(inputLine);
    }

    System.out.println(htmlCode);  // <head><title>Document Moved</title></head><body><h1>Object Moved</h1>This document may be found <a HREF="urlB">here</a></body>

    in.close();     
    return htmlCode;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2019-11-06
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多