How to handle redirects through httpClient?

I am writing acceptance tests with a fluent HttpClient api and am experiencing some problems.

@When("^I submit delivery address and delivery time$") public void I_submit_delivery_address_and_delivery_time() throws Throwable { Response response = Request .Post("http://localhost:9999/food2go/booking/placeOrder") .bodyForm( param("deliveryAddressStreet1", deliveryAddress.getStreet1()), param("deliveryAddressStreet2", deliveryAddress.getStreet2()), param("deliveryTime", deliveryTime)).execute(); content = response.returnContent(); log.debug(content.toString()); } 

This code works well when I use a post-forward strategy, but an exception occurs when I use a redirect instead.

 org.apache.http.client.HttpResponseException: Found 

I want to receive the contents of a redirected page. Any idea is appreciated, thanks in advance.

+4
source share
2 answers

The HTTP specification requires that objects covering objects, such as POST and PUT, be redirected only after human intervention. HttpClient fulfills this requirement by default ..

 10.3 Redirection 3xx This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. The action required MAY be carried out by the user agent without interaction with the user if and only if the method used in the second request is GET or HEAD. 

...

  If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued. 

You can use a custom redirection strategy to limit the restrictions on automatic redirection if necessary.

  DefaultHttpClient client = new DefaultHttpClient(); client.setRedirectStrategy(new LaxRedirectStrategy()); Executor exec = Executor.newInstance(client); String s = exec.execute(Request .Post("http://localhost:9999/food2go/booking/placeOrder") .bodyForm(...)).returnContent().asString(); 
+7
source

This is for an updated version of apache:

 CloseableHttpClient httpClient = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()) .build(); 
+2
source

Source: https://habr.com/ru/post/1497272/


All Articles