I'm using HttpURLConnection to do communication with a backend server and 
im doing so in an async task in the doInBackground method as you should.

Now I need to be able to follow 302 redirects, but I'm having some problems 
with this. The issue is that the new location usually will be on another 
host, however when doing the redirect request it seem not to change the URL 
to a new host hence I get a 404 error saying the specified path does not 
exits.

Now I know I could set HtppURLConnection.setFollowRedirect but I need to 
have more control over the redirects so they should not just be followed 
blindly. The Redirect behavour should be controlled by the object who 
called the asynctask (when an asynctask object is created you pass the 
object who creates it in a parameter called _callback).

Heres's my current code:

    protected HttpResponse doInBackground(String... req) {

HttpURLConnection urlConnection = null;

try {

urlConnection = (HttpURLConnection) this._url.openConnection();

urlConnection.setConnectTimeout( (int) this._timeout*1000);

String body = req[0];

// set headers / write information to output stream if request is post

 // create the response object

HttpResponse responseObject = null;

try

{

// get status, contenttype, charset...

InputStream in = null;

if (urlConnection.getResponseCode() != -1 && 
urlConnection.getResponseCode() < 300)

{

in = new BufferedInputStream(urlConnection.getInputStream(), 8192);

}

else 

{

in = new BufferedInputStream(urlConnection.getErrorStream(), 8192);

}

responseObject = new HttpResponse(in, status, contentType, charset);

// if redirect

if (status == 302 && this._callback.onRedirect(responseObject) == true)

{

// recall

String url = urlConnection.getHeaderField("location");

Log.v("Async Task", "Redirect location: " + url);

this._url = null;

this._url = new URL(url);

urlConnection.disconnect();

urlConnection = null;

responseObject = this.doInBackground(req);

}

 } catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

} 

// return the response

return responseObject;

} 

// catch some other exceptions

finally 

{

if (urlConnection != null)

{

urlConnection.disconnect();

} }

    }

And as said the problem is that the redirect request seem to change the 
path of the URL but not the host. The URL object itself seem to contain the 
right information so I have no idea why this is happening. (I'm getting 
HTML as response which is an 404 error page that includes the server name 
of the old server)

Thanks for any help!

Note: HttpResponse is just an object I created for holding the relevant 
information about the response.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to