Merge branch 'BAEL-12' of https://github.com/tomekl007/tutorials into tomekl007-BAEL-12
This commit is contained in:
		
						commit
						5351ac877f
					
				| @ -1,4 +1,5 @@ | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <groupId>com.baeldung</groupId> | ||||
|     <artifactId>httpclient</artifactId> | ||||
| @ -113,6 +114,13 @@ | ||||
|             <version>${mockito.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>com.github.tomakehurst</groupId> | ||||
|             <artifactId>wiremock</artifactId> | ||||
|             <version>${wiremock.version}</version> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
| 
 | ||||
| 
 | ||||
|     </dependencies> | ||||
| 
 | ||||
| @ -202,6 +210,7 @@ | ||||
|         <org.hamcrest.version>1.3</org.hamcrest.version> | ||||
|         <junit.version>4.12</junit.version> | ||||
|         <mockito.version>1.10.19</mockito.version> | ||||
|         <wiremock.version>2.5.1</wiremock.version> | ||||
| 
 | ||||
|         <httpcore.version>4.4.5</httpcore.version> | ||||
|         <httpclient.version>4.5.2</httpclient.version> <!-- 4.3.6 --> <!-- 4.4-beta1 --> | ||||
|  | ||||
| @ -0,0 +1,154 @@ | ||||
| package org.baeldung.httpclient.advancedconfig; | ||||
| 
 | ||||
| 
 | ||||
| import com.github.tomakehurst.wiremock.junit.WireMockRule; | ||||
| import org.apache.http.HttpHeaders; | ||||
| import org.apache.http.HttpHost; | ||||
| import org.apache.http.HttpResponse; | ||||
| import org.apache.http.auth.AuthScope; | ||||
| import org.apache.http.auth.UsernamePasswordCredentials; | ||||
| import org.apache.http.client.AuthCache; | ||||
| import org.apache.http.client.CredentialsProvider; | ||||
| import org.apache.http.client.HttpClient; | ||||
| import org.apache.http.client.methods.HttpGet; | ||||
| import org.apache.http.client.methods.HttpPost; | ||||
| import org.apache.http.client.protocol.HttpClientContext; | ||||
| import org.apache.http.entity.StringEntity; | ||||
| import org.apache.http.impl.auth.BasicScheme; | ||||
| import org.apache.http.impl.client.BasicAuthCache; | ||||
| import org.apache.http.impl.client.BasicCredentialsProvider; | ||||
| import org.apache.http.impl.client.HttpClients; | ||||
| import org.apache.http.impl.conn.DefaultProxyRoutePlanner; | ||||
| import org.junit.Rule; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| import static com.github.tomakehurst.wiremock.client.WireMock.*; | ||||
| import static org.junit.Assert.assertEquals; | ||||
| 
 | ||||
| public class HttpClientAdvancedConfiguration { | ||||
| 
 | ||||
|     @Rule | ||||
|     public WireMockRule serviceMock = new WireMockRule(8089); | ||||
| 
 | ||||
|     @Rule | ||||
|     public WireMockRule proxyMock = new WireMockRule(8090); | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenClientWithCustomUserAgentHeader_whenExecuteRequest_shouldReturn200() throws IOException { | ||||
|         //given | ||||
|         String userAgent = "BaeldungAgent/1.0"; | ||||
|         serviceMock.stubFor(get(urlEqualTo("/detail")) | ||||
|                 .withHeader("User-Agent", equalTo(userAgent)) | ||||
|                 .willReturn(aResponse() | ||||
|                         .withStatus(200))); | ||||
| 
 | ||||
|         HttpClient httpClient = HttpClients.createDefault(); | ||||
|         HttpGet httpGet = new HttpGet("http://localhost:8089/detail"); | ||||
|         httpGet.setHeader(HttpHeaders.USER_AGENT, userAgent); | ||||
| 
 | ||||
|         //when | ||||
|         HttpResponse response = httpClient.execute(httpGet); | ||||
| 
 | ||||
|         //then | ||||
|         assertEquals(response.getStatusLine().getStatusCode(), 200); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenClientThatSendDataInBody_whenSendXmlInBody_shouldReturn200() throws IOException { | ||||
|         //given | ||||
|         String xmlBody = "<xml><id>1</id></xml>"; | ||||
|         serviceMock.stubFor(post(urlEqualTo("/person")) | ||||
|                 .withHeader("Content-Type", equalTo("application/xml")) | ||||
|                 .withRequestBody(equalTo(xmlBody)) | ||||
|                 .willReturn(aResponse() | ||||
|                         .withStatus(200))); | ||||
| 
 | ||||
|         HttpClient httpClient = HttpClients.createDefault(); | ||||
|         HttpPost httpPost = new HttpPost("http://localhost:8089/person"); | ||||
|         httpPost.setHeader("Content-Type", "application/xml"); | ||||
|         StringEntity xmlEntity = new StringEntity(xmlBody); | ||||
|         httpPost.setEntity(xmlEntity); | ||||
| 
 | ||||
|         //when | ||||
|         HttpResponse response = httpClient.execute(httpPost); | ||||
| 
 | ||||
|         //then | ||||
|         assertEquals(response.getStatusLine().getStatusCode(), 200); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenServerThatIsBehindProxy_whenClientIsConfiguredToSendRequestViaProxy_shouldReturn200() throws IOException { | ||||
|         //given | ||||
|         proxyMock.stubFor(get(urlMatching(".*")) | ||||
|                 .willReturn(aResponse().proxiedFrom("http://localhost:8089/"))); | ||||
| 
 | ||||
|         serviceMock.stubFor(get(urlEqualTo("/private")) | ||||
|                 .willReturn(aResponse().withStatus(200))); | ||||
| 
 | ||||
| 
 | ||||
|         HttpHost proxy = new HttpHost("localhost", 8090); | ||||
|         DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); | ||||
|         HttpClient httpclient = HttpClients.custom() | ||||
|                 .setRoutePlanner(routePlanner) | ||||
|                 .build(); | ||||
| 
 | ||||
|         //when | ||||
|         final HttpGet httpGet = new HttpGet("http://localhost:8089/private"); | ||||
|         HttpResponse response = httpclient.execute(httpGet); | ||||
| 
 | ||||
|         //then | ||||
|         assertEquals(response.getStatusLine().getStatusCode(), 200); | ||||
|         proxyMock.verify(getRequestedFor(urlEqualTo("/private"))); | ||||
|         serviceMock.verify(getRequestedFor(urlEqualTo("/private"))); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void givenServerThatIsBehindAuthorizationProxy_whenClientSendRequest_shouldAuthorizeProperly() throws IOException { | ||||
|         //given | ||||
|         proxyMock.stubFor(get(urlMatching("/private")) | ||||
|                 .willReturn(aResponse().proxiedFrom("http://localhost:8089/"))); | ||||
|         serviceMock.stubFor(get(urlEqualTo("/private")) | ||||
|                 .willReturn(aResponse().withStatus(200))); | ||||
| 
 | ||||
| 
 | ||||
|         HttpHost proxy = new HttpHost("localhost", 8090); | ||||
|         DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); | ||||
| 
 | ||||
|         // Client credentials | ||||
|         CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); | ||||
|         credentialsProvider.setCredentials(new AuthScope(proxy), | ||||
|                 new UsernamePasswordCredentials("username_admin", "secret_password")); | ||||
| 
 | ||||
| 
 | ||||
|         // Create AuthCache instance | ||||
|         AuthCache authCache = new BasicAuthCache(); | ||||
| 
 | ||||
|         // Generate BASIC scheme object and add it to the local auth cache | ||||
|         BasicScheme basicAuth = new BasicScheme(); | ||||
|         authCache.put(proxy, basicAuth); | ||||
|         HttpClientContext context = HttpClientContext.create(); | ||||
|         context.setCredentialsProvider(credentialsProvider); | ||||
|         context.setAuthCache(authCache); | ||||
| 
 | ||||
| 
 | ||||
|         HttpClient httpclient = HttpClients.custom() | ||||
|                 .setRoutePlanner(routePlanner) | ||||
|                 .setDefaultCredentialsProvider(credentialsProvider) | ||||
|                 .build(); | ||||
| 
 | ||||
| 
 | ||||
|         //when | ||||
|         final HttpGet httpGet = new HttpGet("http://localhost:8089/private"); | ||||
|         HttpResponse response = httpclient.execute(httpGet, context); | ||||
| 
 | ||||
|         //then | ||||
|         assertEquals(response.getStatusLine().getStatusCode(), 200); | ||||
|         proxyMock.verify(getRequestedFor(urlEqualTo("/private")).withHeader("Authorization", containing("Basic"))); | ||||
|         serviceMock.verify(getRequestedFor(urlEqualTo("/private"))); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user