[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-1680?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14721188#comment-14721188
 ] 

Pavel Obraztsov commented on HTTPCLIENT-1680:
---------------------------------------------

Oleg, thank you for the comment. But, as you can see, I am using 
LaxRedirectStrategy and POST redirect works for all redirect codes except 307. 
Am I missing something?

> 307 redirect throws ClientProtocolException using POST method
> -------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1680
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1680
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.5
>         Environment: Local
>            Reporter: Pavel Obraztsov
>
> Trying to simulate redirect on HTPP POST with some body. When server return 
> 302 status code, redirect changes from POST to GET and looses body but does 
> not throw any exception. However, when server returns 307 status code, 
> redirect trows org.apache.http.client.ClientProtocolException.
> Here is the junit testcase:
> {code}
> package com.foo.http.examples;
> import static org.junit.Assert.assertEquals;
> import java.io.IOException;
> import java.util.ArrayList;
> import java.util.List;
> import java.util.concurrent.TimeUnit;
> import org.apache.http.client.config.RequestConfig;
> import org.apache.http.client.entity.UrlEncodedFormEntity;
> import org.apache.http.client.methods.CloseableHttpResponse;
> import org.apache.http.client.methods.HttpPost;
> import org.apache.http.impl.bootstrap.HttpServer;
> import org.apache.http.impl.bootstrap.ServerBootstrap;
> import org.apache.http.impl.client.CloseableHttpClient;
> import org.apache.http.impl.client.HttpClients;
> import org.apache.http.impl.client.LaxRedirectStrategy;
> import org.apache.http.message.BasicNameValuePair;
> import org.junit.AfterClass;
> import org.junit.BeforeClass;
> import org.junit.Test;
> public class ApacheHttpClientTest
> {
>   private static HttpServer localServer;
>   private static CloseableHttpClient httpClient;
>   private static RequestHandlerToTestRedirect serverRequestHandler;
>   @BeforeClass
>   public static void setUp() throws Exception
>   {
>     serverRequestHandler = new RequestHandlerToTestRedirect();
>     localServer = ServerBootstrap
>         .bootstrap().setServerInfo("TEST/1.1").setListenerPort(5555)
>         .registerHandler("*", serverRequestHandler).create();
>     localServer.start();
>     RequestConfig defaultRequestConfig = RequestConfig
>         .custom().setMaxRedirects(2).build();
>     httpClient = HttpClients
>         .custom().setRedirectStrategy(new LaxRedirectStrategy())
>         .setDefaultRequestConfig(defaultRequestConfig).build();
>   }
>   @AfterClass
>   public static void shutDown() throws Exception
>   {
>     if (localServer != null)
>     {
>       localServer.shutdown(1, TimeUnit.SECONDS);
>     }
>     if (httpClient != null)
>     {
>       httpClient.close();
>     }
>   }
>   @Test
>   public void redirect302_success() throws IOException
>   {
>     serverRequestHandler.setStatusCode(302);
>     HttpPost post = new HttpPost("http://localhost:5555/";);
>     List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
>     nvps.add(new BasicNameValuePair("param", "value"));
>     post.setEntity(new UrlEncodedFormEntity(nvps));
>     CloseableHttpResponse response = httpClient.execute(post);
>     assertEquals(200, response.getStatusLine().getStatusCode());
>     response.close();
>   }
>   @Test
>   public void redirect307_failure() throws IOException
>   {
>     serverRequestHandler.setStatusCode(307);
>     HttpPost post = new HttpPost("http://localhost:5555/";);
>     List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
>     nvps.add(new BasicNameValuePair("param", "value"));
>     post.setEntity(new UrlEncodedFormEntity(nvps));
>     CloseableHttpResponse response = httpClient.execute(post);
>     assertEquals(200, response.getStatusLine().getStatusCode());
>     response.close();
>   }
> }
> {code}
> {code}
> package com.foo.http.examples;
> import java.io.IOException;
> import org.apache.http.HttpException;
> import org.apache.http.HttpRequest;
> import org.apache.http.HttpResponse;
> import org.apache.http.protocol.HttpContext;
> import org.apache.http.protocol.HttpRequestHandler;
> public class RequestHandlerToTestRedirect implements HttpRequestHandler
> {
>   private static int counter = 1;
>   private int statusCode = 200;
>   public void setStatusCode(int code)
>   {
>     statusCode = code;
>     counter = 1;
>   }
>   @Override
>   public void handle(
>       HttpRequest request, HttpResponse response, HttpContext context)
>           throws HttpException, IOException
>   {
>     response.setStatusCode(statusCode);
>     if(counter > 2)
>     {
>       response.setStatusCode(200);
>     }
>     response.setHeader("location", "/" + counter++);
>     
>   }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to