MinimalHttpClient(final HttpClientConnectionManager connManager) { super(); this.connManager = Args.notNull(connManager, "HTTP connection manager"); this.reuseStrategy = DefaultConnectionReuseStrategy.INSTANCE; this.schemePortResolver = DefaultSchemePortResolver.INSTANCE; this.requestExecutor = new HttpRequestExecutor(this.reuseStrategy); this.httpProcessor = new DefaultHttpProcessor( new RequestContent(), new RequestTargetHost(), new RequestClientConnControl(), new RequestUserAgent(VersionInfo.getSoftwareInfo( "Apache-HttpClient", "org.apache.hc.client5", getClass()))); }
@Test public void testRequestContentInvalidInput() throws Exception { final RequestContent interceptor = new RequestContent(); try { interceptor.process(null, null, null); Assert.fail("IllegalArgumentException should have been thrown"); } catch (final IllegalArgumentException ex) { // expected } }
/** * Creates {@link HttpProcessorBuilder} initialized with default protocol interceptors * for client side HTTP/1.1 processing. * * @param agentInfo the agent info text or {@code null} for default. * @return the processor builder. */ public static HttpProcessorBuilder customClient(final String agentInfo) { return HttpProcessorBuilder.create() .addAll( new RequestContent(), new RequestTargetHost(), new RequestConnControl(), new RequestUserAgent(!TextUtils.isBlank(agentInfo) ? agentInfo : VersionInfo.getSoftwareInfo(SOFTWARE, "org.apache.hc.core5", HttpProcessors.class)), new RequestExpectContinue()); }
/** * Creates {@link HttpProcessorBuilder} initialized with default protocol interceptors * for client side HTTP/1.1 processing. * * @param agentInfo the agent info text or {@code null} for default. * @return the processor builder. */ public static HttpProcessorBuilder customClient(final String agentInfo) { return HttpProcessorBuilder.create() .addAll( new RequestContent(), new RequestTargetHost(), new RequestConnControl(), new RequestUserAgent(!TextUtils.isBlank(agentInfo) ? agentInfo : VersionInfo.getSoftwareInfo(SOFTWARE, "org.apache.hc.core5", HttpProcessors.class)), new RequestExpectContinue()); }
@Test public void testRequestContentIgnoreNonenclosingRequests() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); Assert.assertEquals(0, request.getHeaders().length); }
@Test public void testRequestContentEntityContentLengthDelimitedHTTP11() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final String s = "whatever"; final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); final Header header = request.getFirstHeader(HttpHeaders.CONTENT_LENGTH); Assert.assertNotNull(header); Assert.assertEquals(s.length(), Integer.parseInt(header.getValue())); Assert.assertNull(request.getFirstHeader(HttpHeaders.TRANSFER_ENCODING)); }
@Test public void testRequestContentNullEntity() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); final Header header = request.getFirstHeader(HttpHeaders.CONTENT_LENGTH); Assert.assertNull(header); Assert.assertNull(request.getFirstHeader(HttpHeaders.TRANSFER_ENCODING)); }
@Test public void testBuildChain() throws Exception { final ChainBuilder<HttpRequestInterceptor> cb = new ChainBuilder<>(); final HttpRequestInterceptor i1 = new RequestContent(); final HttpRequestInterceptor i2 = new RequestTargetHost(); final HttpRequestInterceptor i3 = new RequestConnControl(); final HttpRequestInterceptor i4 = new RequestUserAgent(); final HttpRequestInterceptor i5 = new RequestExpectContinue(); cb.addFirst(i1); cb.addAllFirst(i2, i3); cb.addFirst(null); cb.addAllFirst((List<HttpRequestInterceptor>) null); cb.addLast(i4); cb.addLast(null); cb.addAllLast(i5); cb.addAllLast((List<HttpRequestInterceptor>) null); cb.addFirst(i1); cb.addAllLast(i3, i4, i5); final LinkedList<HttpRequestInterceptor> list = cb.build(); Assert.assertNotNull(list); Assert.assertEquals(5, list.size()); Assert.assertSame(i1, list.get(0)); Assert.assertSame(i2, list.get(1)); Assert.assertSame(i3, list.get(2)); Assert.assertSame(i4, list.get(3)); Assert.assertSame(i5, list.get(4)); }
@Test public void testRequestContentNullTypeAndEncoding() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final BasicHttpEntity entity = new BasicHttpEntity(); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); Assert.assertNull(request.getFirstHeader(HttpHeaders.CONTENT_TYPE)); Assert.assertNull(request.getFirstHeader(HttpHeaders.CONTENT_ENCODING)); }
@Test public void testRequestContentEntityChunkedHTTP10() throws Exception { final HttpContext context = new BasicHttpContext(null); context.setProtocolVersion(HttpVersion.HTTP_1_0); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final String s = "whatever"; final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII); entity.setChunked(true); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); try { interceptor.process(request, request.getEntity(), context); Assert.fail("ProtocolException should have been thrown"); } catch (final ProtocolException ex) { // expected } }
@Test public void testRequestContentEntityUnknownLengthHTTP10() throws Exception { final HttpContext context = new BasicHttpContext(null); context.setProtocolVersion(HttpVersion.HTTP_1_0); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final BasicHttpEntity entity = new BasicHttpEntity(); entity.setContentLength(-1); entity.setChunked(false); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); try { interceptor.process(request, request.getEntity(), context); Assert.fail("ProtocolException should have been thrown"); } catch (final ProtocolException ex) { // expected } }
@Test public void testRequestContentAddHeaders() throws Exception { final RequestContent interceptor = new RequestContent(true); final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); request.setEntity(new StringEntity("")); interceptor.process(request, request.getEntity(), context); final Header h1 = request.getFirstHeader(HttpHeaders.CONTENT_LENGTH); Assert.assertNotNull(h1); Assert.assertEquals("0", h1.getValue()); final Header h2 = request.getFirstHeader(HttpHeaders.TRANSFER_ENCODING); Assert.assertNull(h2); }
@Test public void testRequestContentOverwriteHeaders() throws Exception { final RequestContent interceptor = new RequestContent(true); final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); request.addHeader(new BasicHeader(HttpHeaders.CONTENT_LENGTH, "10")); request.addHeader(new BasicHeader(HttpHeaders.TRANSFER_ENCODING, "whatever")); request.setEntity(new StringEntity("")); interceptor.process(request, request.getEntity(), context); final Header h1 = request.getFirstHeader(HttpHeaders.CONTENT_LENGTH); Assert.assertNotNull(h1); Assert.assertEquals("0", h1.getValue()); }
@Test public void testRequestContentEntityChunkedHTTP11() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final String s = "whatever"; final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII); entity.setChunked(true); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); final Header header = request.getFirstHeader(HttpHeaders.TRANSFER_ENCODING); Assert.assertNotNull(header); Assert.assertEquals("chunked", header.getValue()); Assert.assertNull(request.getFirstHeader(HttpHeaders.CONTENT_LENGTH)); }
new RequestContent(), new RequestTargetHost(), new RequestClientConnControl(),
@Test public void testRequestContentEntityUnknownLengthHTTP11() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final BasicHttpEntity entity = new BasicHttpEntity(); entity.setContentLength(-1); entity.setChunked(false); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); final Header header = request.getFirstHeader(HttpHeaders.TRANSFER_ENCODING); Assert.assertNotNull(header); Assert.assertEquals("chunked", header.getValue()); Assert.assertNull(request.getFirstHeader(HttpHeaders.CONTENT_LENGTH)); }
@Test public void testRequestContentProtocolException() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request1 = new BasicClassicHttpRequest("POST", "/"); request1.addHeader(new BasicHeader(HttpHeaders.TRANSFER_ENCODING, "chunked")); final BasicClassicHttpRequest request2 = new BasicClassicHttpRequest("POST", "/"); request2.addHeader(new BasicHeader(HttpHeaders.CONTENT_LENGTH, "12")); final RequestContent interceptor = new RequestContent(); try { interceptor.process(request1, request1.getEntity(), context); Assert.fail("ProtocolException should have been thrown"); } catch (final ProtocolException ex) { // expected } try { interceptor.process(request2, request2.getEntity(), context); Assert.fail("ProtocolException should have been thrown"); } catch (final ProtocolException ex) { // expected } }
@Test public void testRequestContentTypeAndEncoding() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final BasicHttpEntity entity = new BasicHttpEntity(); entity.setContentType("whatever"); entity.setContentEncoding("whatever"); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); final Header h1 = request.getFirstHeader(HttpHeaders.CONTENT_TYPE); Assert.assertNotNull(h1); Assert.assertEquals("whatever", h1.getValue()); final Header h2 = request.getFirstHeader(HttpHeaders.CONTENT_ENCODING); Assert.assertNotNull(h2); Assert.assertEquals("whatever", h2.getValue()); }
@Test public void testRequestContentEntityWithTrailers() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final String s = "whatever"; final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII); request.setEntity(new HttpEntityWithTrailers(entity, new BasicHeader("h1", "this"), new BasicHeader("h1", "that"), new BasicHeader("h2", "this and that"))); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); final Header header1 = request.getFirstHeader(HttpHeaders.TRANSFER_ENCODING); Assert.assertNotNull(header1); final Header header2 = request.getFirstHeader(HttpHeaders.TRAILER); Assert.assertNotNull(header2); Assert.assertEquals("h1, h2", header2.getValue()); }