[JAVA-15027]Upgraded follow redirects for apache http client + moved … (#14092)
* [JAVA-15027]Upgraded follow redirects for apache http client + moved older version to apache-httpclient4 module * [JAVA-15027] Added test case
This commit is contained in:
parent
1cee2277c6
commit
4751f16080
|
@ -1,98 +1,61 @@
|
||||||
package com.baeldung.httpclient;
|
package com.baeldung.httpclient;
|
||||||
|
|
||||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.hc.client5.http.classic.methods.HttpGet;
|
||||||
import org.apache.http.client.methods.HttpGet;
|
import org.apache.hc.client5.http.classic.methods.HttpPost;
|
||||||
import org.apache.http.client.methods.HttpHead;
|
import org.apache.hc.client5.http.impl.DefaultRedirectStrategy;
|
||||||
import org.apache.http.client.methods.HttpPost;
|
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
|
||||||
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
|
||||||
import org.apache.http.impl.client.DefaultRedirectStrategy;
|
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||||
import org.apache.http.impl.client.HttpClientBuilder;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.apache.http.impl.client.HttpClients;
|
|
||||||
import org.apache.http.impl.client.LaxRedirectStrategy;
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import org.junit.After;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
class HttpClientRedirectLiveTest {
|
||||||
import static org.junit.Assert.assertThat;
|
|
||||||
|
|
||||||
public class HttpClientRedirectLiveTest {
|
|
||||||
|
|
||||||
private CloseableHttpClient instance;
|
|
||||||
|
|
||||||
private CloseableHttpResponse response;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public final void before() {
|
|
||||||
instance = HttpClientBuilder.create().build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@After
|
|
||||||
public final void after() throws IllegalStateException, IOException {
|
|
||||||
ResponseUtil.closeResponse(response);
|
|
||||||
}
|
|
||||||
|
|
||||||
// tests
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public final void givenRedirectsAreDisabledViaNewApi_whenConsumingUrlWhichRedirects_thenNotRedirected() throws IOException {
|
void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenNotRedirected() throws IOException {
|
||||||
instance = HttpClients.custom().disableRedirectHandling().build();
|
|
||||||
|
|
||||||
final HttpGet httpGet = new HttpGet("http://t.co/I5YYd9tddw");
|
final HttpGet request = new HttpGet("http://t.co/I5YYd9tddw");
|
||||||
response = instance.execute(httpGet);
|
|
||||||
|
|
||||||
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
|
try (CloseableHttpClient httpClient = HttpClients.custom()
|
||||||
|
.disableRedirectHandling()
|
||||||
|
.build()) {
|
||||||
|
httpClient.execute(request, response -> {
|
||||||
|
assertThat(response.getCode(), equalTo(301));
|
||||||
|
return response;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public final void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenNotRedirected() throws IOException {
|
void givenRedirectingPOST_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws IOException {
|
||||||
instance = HttpClientBuilder.create().disableRedirectHandling().build();
|
|
||||||
response = instance.execute(new HttpGet("http://t.co/I5YYd9tddw"));
|
|
||||||
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
|
|
||||||
}
|
|
||||||
|
|
||||||
// redirect with POST
|
final HttpPost request = new HttpPost("http://t.co/I5YYd9tddw");
|
||||||
|
|
||||||
@Test
|
try (CloseableHttpClient httpClient = HttpClientBuilder.create()
|
||||||
public final void givenPostRequest_whenConsumingUrlWhichRedirects_thenNotRedirected() throws IOException {
|
.build()) {
|
||||||
instance = HttpClientBuilder.create().build();
|
httpClient.execute(request, response -> {
|
||||||
response = instance.execute(new HttpPost("http://t.co/I5YYd9tddw"));
|
assertThat(response.getCode(), equalTo(200));
|
||||||
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
|
return response;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public final void givenRedirectingPOSTViaPost4_2Api_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws IOException {
|
void givenRedirectingPOST_whenUsingDefaultRedirectStrategy_thenRedirected() throws IOException {
|
||||||
final CloseableHttpClient client = HttpClients.custom().setRedirectStrategy(new DefaultRedirectStrategy() {
|
|
||||||
/** Redirectable methods. */
|
|
||||||
private final String[] REDIRECT_METHODS = new String[]{HttpGet.METHOD_NAME, HttpPost.METHOD_NAME, HttpHead.METHOD_NAME};
|
|
||||||
|
|
||||||
@Override
|
final HttpPost request = new HttpPost("http://t.co/I5YYd9tddw");
|
||||||
protected boolean isRedirectable(final String method) {
|
|
||||||
return Arrays.stream(REDIRECT_METHODS)
|
|
||||||
.anyMatch(m -> m.equalsIgnoreCase(method));
|
|
||||||
}
|
|
||||||
}).build();
|
|
||||||
|
|
||||||
response = client.execute(new HttpPost("http://t.co/I5YYd9tddw"));
|
try (CloseableHttpClient httpClient = HttpClientBuilder.create()
|
||||||
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
|
.setRedirectStrategy(new DefaultRedirectStrategy())
|
||||||
|
.build()) {
|
||||||
|
httpClient.execute(request, response -> {
|
||||||
|
assertThat(response.getCode(), equalTo(200));
|
||||||
|
return response;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public final void givenRedirectingPOSTVia4_2Api_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws IOException {
|
|
||||||
final CloseableHttpClient client = HttpClients.custom().setRedirectStrategy(new LaxRedirectStrategy()).build();
|
|
||||||
|
|
||||||
response = client.execute(new HttpPost("http://t.co/I5YYd9tddw"));
|
|
||||||
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public final void givenRedirectingPOST_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws IOException {
|
|
||||||
instance = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();
|
|
||||||
response = instance.execute(new HttpPost("http://t.co/I5YYd9tddw"));
|
|
||||||
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ This module contains articles about Apache HttpClient 4.5
|
||||||
- [Apache HttpClient vs. CloseableHttpClient](https://www.baeldung.com/apache-httpclient-vs-closeablehttpclient)
|
- [Apache HttpClient vs. CloseableHttpClient](https://www.baeldung.com/apache-httpclient-vs-closeablehttpclient)
|
||||||
- [Expand Shortened URLs with Apache HttpClient](https://www.baeldung.com/apache-httpclient-expand-url)
|
- [Expand Shortened URLs with Apache HttpClient](https://www.baeldung.com/apache-httpclient-expand-url)
|
||||||
- [Retrying Requests using Apache HttpClient](https://www.baeldung.com/java-retrying-requests-using-apache-httpclient)
|
- [Retrying Requests using Apache HttpClient](https://www.baeldung.com/java-retrying-requests-using-apache-httpclient)
|
||||||
|
- [Apache HttpClient – Follow Redirects for POST](https://www.baeldung.com/httpclient-redirect-on-http-post)
|
||||||
|
|
||||||
### Running the Tests
|
### Running the Tests
|
||||||
To run the live tests, use the command: mvn clean install -Plive
|
To run the live tests, use the command: mvn clean install -Plive
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
package com.baeldung.httpclient;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||||
|
import org.apache.http.client.methods.HttpGet;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.apache.http.impl.client.HttpClientBuilder;
|
||||||
|
import org.apache.http.impl.client.HttpClients;
|
||||||
|
import org.apache.http.impl.client.LaxRedirectStrategy;
|
||||||
|
|
||||||
|
class HttpClientRedirectV4LiveTest {
|
||||||
|
private CloseableHttpClient instance;
|
||||||
|
|
||||||
|
private CloseableHttpResponse response;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public final void before() {
|
||||||
|
instance = HttpClientBuilder.create()
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
public final void after() throws IllegalStateException, IOException {
|
||||||
|
ResponseUtil.closeResponse(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenNotRedirected() throws IOException {
|
||||||
|
instance = HttpClients.custom()
|
||||||
|
.disableRedirectHandling()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
final HttpGet httpGet = new HttpGet("http://t.co/I5YYd9tddw");
|
||||||
|
response = instance.execute(httpGet);
|
||||||
|
|
||||||
|
assertThat(response.getStatusLine()
|
||||||
|
.getStatusCode(), equalTo(301));
|
||||||
|
}
|
||||||
|
|
||||||
|
// redirect with POST
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenPostRequest_whenConsumingUrlWhichRedirects_thenNotRedirected() throws IOException {
|
||||||
|
instance = HttpClientBuilder.create()
|
||||||
|
.build();
|
||||||
|
response = instance.execute(new HttpPost("http://t.co/I5YYd9tddw"));
|
||||||
|
assertThat(response.getStatusLine()
|
||||||
|
.getStatusCode(), equalTo(301));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenRedirectingPOST_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws IOException {
|
||||||
|
instance = HttpClientBuilder.create()
|
||||||
|
.setRedirectStrategy(new LaxRedirectStrategy())
|
||||||
|
.build();
|
||||||
|
response = instance.execute(new HttpPost("http://t.co/I5YYd9tddw"));
|
||||||
|
assertThat(response.getStatusLine()
|
||||||
|
.getStatusCode(), equalTo(200));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue