hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ken Krugler <kkrugler_li...@transpac.com>
Subject Re: HttpClient 4.1.2 and redirect handling...
Date Thu, 29 Sep 2011 05:20:26 GMT
This is a topic that comes up repeatedly on the list.

From Ryan Smith's response to the same question about a year ago:

> Redirecting POSTs breaks RFC standards.  You need to extend and implement
> your own RedirectHandler/RedirectStrategy and tell HttpClient to use it
> instead of the default one.

I see that section 5.3 in the tutorial already says "HttpClient handles all types of redirects
automatically, except those explicitly prohibited by the HTTP specification as requiring user
intervention". Though I don't know what the next bit of text on the tutorial is trying to
say: "See Other (status code 303) redirects on POST and PUT requests..."

There's some code at Stack Overflow (first hit on http://lmgtfy.com/?q=httpclient+4+doesn%27t+redirect+post)
that might be useful.

http://stackoverflow.com/questions/3658721/httpclient-4-error-302-how-to-redirect

-- Ken

On Sep 28, 2011, at 8:54pm, Jeff wrote:

> Being new to the v4.x HttpClient (and rusty with older versions...ack), this
> may be something obvious that I've just missed.
> 
> The tutorial (section 5.3) states that HttpClient handles most redirect
> automatically.  I have the following set:
> 
> 
> httpclient.getParams().setBooleanParameter(ClientPNames.HANDLE_REDIRECTS,
> true);
> 
> httpclient.getParams().setBooleanParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS,
> true);
> 
> I create the HttpPost for the form POST which seems to be working:
> 
>      post = new HttpPost(baseUrl + "/userLoginManual.aspx");
> 
>      List<NameValuePair> formparams = new ArrayList<NameValuePair>();
>      formparams.add(new BasicNameValuePair("postlogin_path",
> "/offers/consent.aspx"));
>      formparams.add(new BasicNameValuePair("login", username));
>      formparams.add(new BasicNameValuePair("password", password));
>      UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,
> "UTF-8");
>      post.setEntity(entity);
> 
>      response = httpclient.execute(post, localContext);
> 
>      code = response.getStatusLine().getStatusCode();
> 
> But the response is "302 - Moved Temporarily".  This is part of the normal
> process, but I would have expected HttpClient to handle it and return me a
> 200.
> 
> Since I really only needed the cookies returned after successful auth, I am
> doing :
> 
>      try {
>        respStr = responseHandler.handleResponse(response);
>      } catch (HttpResponseException hrex) {
>        post.abort();
>      }
> in order to consume the response which is throwing the HttpResponseException
> (due to the 302) and calling post.abort().  This works for me, but I
> wondered why the redirect isn't happening automagically.
> 
> Any light/knowledge/insight is much appreciated.
> 
> -- 
> Jeff Vincent
> predatorvi@gmail.com
> See my LinkedIn profile at:
> http://www.linkedin.com/in/rjeffreyvincent
> I ♥ DropBox <http://db.tt/9O6LfBX> !!

--------------------------
Ken Krugler
+1 530-210-6378
http://bixolabs.com
custom big data solutions & training
Hadoop, Cascading, Mahout & Solr




Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message