I'm trying to write a program to do automated testing on my webapp. To accomplish this, I open up a connection using HttpURLConnection.
One of the pages that I'm trying to test performs a 302 redirect. My test code looks like this :
URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
connection.connect();
system.out.println(connection.getURL().toString());
So, let's say that urlToSend is http://www.foo.com/bar.jsp, and that this page redirects you to http://www.foo.com/quux.jsp. My println statement should print out http://www.foo.com/quux.jsp, right?
WRONG.
The redirect never happens, and it prints out the original URL. However, if I change switch out the connection.connect() line with a call to connection.getResponseCode(), it magically works.
URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
//connection.connect();
connection.getResponseCode();
system.out.println(connection.getURL().toString());
Why am I seeing this behavior? Am I doing anything wrong?
Thanks for the help.
The connect()
method just creates a connection. You have to commit the request (by calling getInputStream()
, getResponseCode()
, or getResponseMessage()
) for the response to be returned and processed.