How to prevent apache http client from following a redirect

后端 未结 10 1866
独厮守ぢ
独厮守ぢ 2020-11-28 06:08

I\'m connecting to a remote server with apache http client. the remote server sends a redirect, and i want to achieve that my client isn\'t following the redirect automatica

10条回答
  •  被撕碎了的回忆
    2020-11-28 06:36

    Before HttpClient 4.3

    In older versions of the Http Client (before 4.3), we can configure what the client does with redirects as follows:

    @Test
    public void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenNotRedirected() 
      throws ClientProtocolException, IOException {
        DefaultHttpClient instance = new DefaultHttpClient();
    
        HttpParams params = new BasicHttpParams();
        params.setParameter(ClientPNames.HANDLE_REDIRECTS, false);
        // HttpClientParams.setRedirecting(params, false); // alternative
    
        HttpGet httpGet = new HttpGet("http:/testabc.com");
        httpGet.setParams(params);
        CloseableHttpResponse response = instance.execute(httpGet);
    
        assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
    }
    

    Notice the alternative API that can be used to configure the redirect behavior without using setting the actual raw http.protocol.handle-redirects parameter:

    HttpClientParams.setRedirecting(params, false);
    

    Also notice that, with follow redirects disabled, we can now check that the Http Response status code is indeed 301 Moved Permanently – as it should be.

    After HttpClient 4.3

    HttpClient 4.3 introduced a cleaner, more high level API to build and configure the client:

    @Test
    public void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenNotRedirected() 
      throws ClientProtocolException, IOException {
        HttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();
        HttpResponse response = instance.execute(new HttpGet("http://testabc.com"));
    
        assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
    }
    

    Note that the new API configures the entire client with this redirect behavior – not just the individual request. Reference: http://www.baeldung.com/httpclient-stop-follow-redirect

提交回复
热议问题