2:05 PM
0
301-redirect
The HttpURLConnection‘s follow redirect is just an indicator, in fact it won’t help you to do the “real” http redirection, you still need to handle it manually.
URL obj = new URL(url);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setInstanceFollowRedirects(true);  //you still need to handle redirect manully.
HttpURLConnection.setFollowRedirects(true);

1. Java Http Redirect Example

If a server is redirected from the original URL to another URL, the response code should be 301: Moved Permanently or 302: Temporary Redirect. And you can get the new redirected url by reading the “Location” header of the HTTP response header.
For example, access to the normal HTTP twitter website – http://www.twitter.com , it will auto redirect to the HTTPS twitter website – https://www.twitter.com.
HttpRedirectExample – Full Java follow redirect example, see comments for self-explanatory.
package com.mkyong.http;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class HttpRedirectExample {
 
  public static void main(String[] args) {
 
    try {
 
 String url = "http://www.twitter.com";
 
 URL obj = new URL(url);
 HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
 conn.setReadTimeout(5000);
 conn.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
 conn.addRequestProperty("User-Agent", "Mozilla");
 conn.addRequestProperty("Referer", "google.com");
 
 System.out.println("Request URL ... " + url);
 
 boolean redirect = false;
 
 // normally, 3xx is redirect
 int status = conn.getResponseCode();
 if (status != HttpURLConnection.HTTP_OK) {
  if (status == HttpURLConnection.HTTP_MOVED_TEMP
   || status == HttpURLConnection.HTTP_MOVED_PERM
    || status == HttpURLConnection.HTTP_SEE_OTHER)
  redirect = true;
 }
 
 System.out.println("Response Code ... " + status);
 
 if (redirect) {
 
  // get redirect url from "location" header field
  String newUrl = conn.getHeaderField("Location");
 
  // get the cookie if need, for login
  String cookies = conn.getHeaderField("Set-Cookie");
 
  // open the new connnection again
  conn = (HttpURLConnection) new URL(newUrl).openConnection();
  conn.setRequestProperty("Cookie", cookies);
  conn.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
  conn.addRequestProperty("User-Agent", "Mozilla");
  conn.addRequestProperty("Referer", "google.com");
 
  System.out.println("Redirect to URL : " + newUrl);
 
 }
 
 BufferedReader in = new BufferedReader(
                              new InputStreamReader(conn.getInputStream()));
 String inputLine;
 StringBuffer html = new StringBuffer();
 
 while ((inputLine = in.readLine()) != null) {
  html.append(inputLine);
 }
 in.close();
 
 System.out.println("URL Content... \n" + html.toString());
 System.out.println("Done");
 
    } catch (Exception e) {
 e.printStackTrace();
    }
 
  }
 
}
Output
Request URL ... http://www.twitter.com
Response Code ... 301
Redirect to URL : https://twitter.com/
URL Content... 
<!DOCTYPE html><!--[if IE 8]><html class= // twitter.com url content...
Do share if you have better way to handle the HTTP redirection :)
ref: http://www.mkyong.com/java/java-httpurlconnection-follow-redirect-example/

0 comments:

Post a Comment