Valeriy Ak created CAMEL-18840:
----------------------------------

             Summary: HTTP broken followRedirection 
                 Key: CAMEL-18840
                 URL: https://issues.apache.org/jira/browse/CAMEL-18840
             Project: Camel
          Issue Type: Bug
          Components: camel-http
    Affects Versions: 3.20.0
            Reporter: Valeriy Ak


Look like in 3.20.0 broken functionallity for disable follow redirections (HTTP 
300-399 statuses) by set automatic-retries-disabled. Now need also set 
*RedirectHandlingDisabled*

 

Here simple example:
{code:java}
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.http.HttpComponent;
import org.apache.camel.impl.DefaultCamelContext;

import static org.apache.camel.builder.endpoint.StaticEndpointBuilders.http;

class Scratch {
    public static void main(String[] args) throws Exception {
        //1
        CamelContext context1 = createContext(8080);
        var httpComponent1 = context1.getComponent("http", HttpComponent.class);
        httpComponent1.setFollowRedirects(false);
        context1.start();

        var response1 = 
context1.createProducerTemplate().requestBody("direct:http", "");
        //Redirect to Apache Camel Page without any errors
        System.out.println(response1);


        //2
        CamelContext context2 = createContext(8081);
        var httpComponent2 = context2.getComponent("http", HttpComponent.class);
        httpComponent2.setFollowRedirects(false);
        httpComponent2.setAutomaticRetriesDisabled(true);
        context2.start();
        var response2 = 
context2.createProducerTemplate().requestBody("direct:http", "");
        //Redirect to Apache Camel Page without any errors
        System.out.println(response2);

        //3
        CamelContext context3 = createContext(8082);
        var httpComponent3 = context3.getComponent("http", HttpComponent.class);
        httpComponent3.setFollowRedirects(false);
        httpComponent3.setAutomaticRetriesDisabled(true);
        httpComponent3.setRedirectHandlingDisabled(true);
        context3.start();
        var response3 = 
context3.createProducerTemplate().requestBody("direct:http", "");
        //work as expected - error throws
        System.out.println(response3);

    }

    private static CamelContext createContext(int port) throws Exception {
        CamelContext context = new DefaultCamelContext();
        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() {
                
restConfiguration().component("jetty").host("localhost").port(port);
                rest().get("test303").to("direct:addLocation");
                from("direct:addLocation")
                        .setHeader("Location", 
constant("https://camel.apache.org";))
                        .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(303));

                from("direct:http")
                        .setHeader(Exchange.HTTP_METHOD, constant("GET"))
                        .to(http("localhost:" + port + "/test303")
                                .bridgeEndpoint(true)
                                .throwExceptionOnFailure(true)
                                .advanced()
                                .okStatusCodeRange("200-299"))
                        .convertBodyTo(String.class);
            }
        });
        return context;
    }
} {code}
 

* In version 3.11.1 exaption throw on 2 step with setAutomaticRetriesDisabled  
(for run it - need remove setFollowRedirects)

* In version 3.20.0 exaption throw  {*}only on 3 step{*}.

 

Please fix it or add description of this new behavior to your documentaions. 
Also I don't understan how to use option 
*camel.component.http.follow-redirects* because seems it does not works as 
expected "Whether to the HTTP request should follow redirects."

 

 

 

 

 

 

 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to