Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Infinite redirect loop in HTTP request

I'm getting a too many redirects redirect error from URLConnection when trying to fetch www.palringo.com

    URL url = new URL("http://www.palringo.com/");      
    HttpURLConnection.setFollowRedirects(true);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    System.out.println("Response code = " + connection.getResponseCode());

outputs the dreaded:

Exception in thread "main" java.net.ProtocolException: Server redirected too many  times (20)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)

According to wget there is just one redirect, from www.palringo.com to www.palringo.com/en/gb/

Any ideas why my request using URLConnection for /en/gb results in another 302 response for the same resource ?

The problem is exemplified by:

    URL url = new URL("http://www.palringo.com/en/gb/");        
    HttpURLConnection.setFollowRedirects(false);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    // Just for testing, use Chrome header, to eliminate "anti-crawler" response!
    connection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/11.04 Chromium/12.0.742.112 Chrome/12.0.742.112 Safari/534.30");
    System.out.println("Response code = " + connection.getResponseCode());

This outputs:

Response code = 302
Redirected to /en/gb/

hence an infinite redirect loop.

Interestingly although browsers and wget handle it, curl does not:

joel@bohr:/tmp$ curl http://www.palringo.com/en/gb/
curl: (7) couldn't connect to host

A request for /en/gb/ is redirected to /en/gb/ precisely once.

like image 407
Joel Avatar asked Jul 19 '11 11:07

Joel


1 Answers

The problem is that your HttpURLConnection (or whatever code you use -- sorry, I'm NOT familiar with Java) does not use cookies.

Disable cookies in browser and observe exactly the same behaviour -- infinite redirect.

The reason: Server checks if cookie is set. If not set -- it sets it and redirects. Because cookies are not supported/disabled, script on server side redirects over and over again.

Solution: Enable/add cookie support to your code and try again.

like image 158
LazyOne Avatar answered Sep 28 '22 02:09

LazyOne