private static HttpEntity buildEntityFrom(Request originalRequest) { ContentTypeHeader contentTypeHeader = originalRequest.contentTypeHeader().or("text/plain"); ContentType contentType = ContentType.create(contentTypeHeader.mimeTypePart(), contentTypeHeader.encodingPart().or("utf-8")); if (originalRequest.containsHeader(TRANSFER_ENCODING) && originalRequest.header(TRANSFER_ENCODING).firstValue().equals("chunked")) { return applyGzipWrapperIfRequired( originalRequest, new InputStreamEntity(new ByteArrayInputStream(originalRequest.getBody()), -1, contentType) ); } return applyGzipWrapperIfRequired( originalRequest, new ByteArrayEntity(originalRequest.getBody()) ); }
private static void addBodyIfPostPutOrPatch(HttpRequest httpRequest, ResponseDefinition response) throws UnsupportedEncodingException { Request originalRequest = response.getOriginalRequest(); if (originalRequest.getMethod().isOneOf(PUT, POST, PATCH)) { HttpEntityEnclosingRequest requestWithEntity = (HttpEntityEnclosingRequest) httpRequest; requestWithEntity.setEntity(buildEntityFrom(originalRequest)); } }
private Response buildResponse(ServeEvent serveEvent) { if (serveEvent.getResponseDefinition().isProxyResponse()) { return proxyResponseRenderer.render(serveEvent); } else { Response.Builder responseBuilder = renderDirectly(serveEvent); return responseBuilder.build(); } }
@Override public Response render(ServeEvent serveEvent) { ResponseDefinition responseDefinition = serveEvent.getResponseDefinition(); HttpUriRequest httpRequest = getHttpRequestFor(responseDefinition); addRequestHeaders(httpRequest, responseDefinition); try { addBodyIfPostPutOrPatch(httpRequest, responseDefinition); HttpResponse httpResponse = client.execute(httpRequest); return response() .status(httpResponse.getStatusLine().getStatusCode()) .headers(headersFrom(httpResponse, responseDefinition)) .body(getEntityAsByteArrayAndCloseStream(httpResponse)) .fromProxy(true) .configureDelay( globalSettingsHolder.get().getFixedDelay(), globalSettingsHolder.get().getDelayDistribution(), responseDefinition.getFixedDelayMilliseconds(), responseDefinition.getDelayDistribution() ) .chunkedDribbleDelay(responseDefinition.getChunkedDribbleDelay()) .build(); } catch (IOException e) { throw new RuntimeException(e); } }
public StubRequestHandler buildStubRequestHandler() { Map<String, PostServeAction> postServeActions = options.extensionsOfType(PostServeAction.class); return new StubRequestHandler( this, new StubResponseRenderer( options.filesRoot().child(FILES_ROOT), getGlobalSettingsHolder(), new ProxyResponseRenderer( options.proxyVia(), options.httpsSettings().trustStore(), options.shouldPreserveHostHeader(), options.proxyHostHeader(), globalSettingsHolder), ImmutableList.copyOf(options.extensionsOfType(ResponseTransformer.class).values()) ), this, postServeActions, requestJournal ); }
private void addRequestHeaders(HttpRequest httpRequest, ResponseDefinition response) { Request originalRequest = response.getOriginalRequest(); for (String key: originalRequest.getAllHeaderKeys()) { if (headerShouldBeTransferred(key)) { if (!HOST_HEADER.equalsIgnoreCase(key) || preserveHostHeader) { List<String> values = originalRequest.header(key).values(); for (String value: values) { httpRequest.addHeader(key, value); } } else { if (hostHeaderValue != null) { httpRequest.addHeader(key, hostHeaderValue); } else if (response.getProxyBaseUrl() != null) { httpRequest.addHeader(key, URI.create(response.getProxyBaseUrl()).getAuthority()); } } } } if (response.getAdditionalProxyRequestHeaders() != null) { for (String key: response.getAdditionalProxyRequestHeaders().keys()) { httpRequest.setHeader(key, response.getAdditionalProxyRequestHeaders().getHeader(key).firstValue()); } } }
private static HttpHandler mockHandler(String originId, WireMockApp wireMockApp, WireMockConfiguration defaultConfig) { return newHandler(originId, new StubRequestHandler( wireMockApp, new StubResponseRenderer( defaultConfig.filesRoot().child(FILES_ROOT), wireMockApp.getGlobalSettingsHolder(), new ProxyResponseRenderer( defaultConfig.proxyVia(), defaultConfig.httpsSettings().trustStore(), defaultConfig.shouldPreserveHostHeader(), defaultConfig.proxyHostHeader() ) ) )); }