@Override public String getUrl() { return target.getUrl(); }
@JsonIgnore public String getProxyUrl() { if (browserProxyUrl != null) { return browserProxyUrl; } return proxyBaseUrl + originalRequest.getUrl(); }
private void forwardToFilesContext(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Request request) throws ServletException, IOException { String forwardUrl = wiremockFileSourceRoot + WireMockApp.FILES_ROOT + request.getUrl(); RequestDispatcher dispatcher = httpServletRequest.getRequestDispatcher(decode(forwardUrl, UTF_8.name())); dispatcher.forward(httpServletRequest, httpServletResponse); } }
protected String formatRequest(Request request) { StringBuilder sb = new StringBuilder(); sb.append(request.getClientIp()) .append(" - ") .append(request.getMethod()) .append(" ") .append(request.getUrl()); if (request.isBrowserProxyRequest()) { sb.append(" (via browser proxy request)"); } sb.append("\n\n"); sb.append(request.getHeaders()); if (request.getBody() != null) { sb.append(request.getBodyAsString()).append("\n"); } return sb.toString(); }
public static RequestLine fromRequest(final Request request) { URI url = URI.create(request.getUrl()); Map<String, QueryParameter> rawQuery = Urls.splitQuery(url); Map<String, ListOrSingle<String>> adaptedQuery = Maps.transformValues(rawQuery, TO_TEMPLATE_MODEL); return new RequestLine(request.getMethod(), request.getScheme(), request.getHost(), request.getPort(), request.getUrl(), adaptedQuery); }
@Override public void requestReceived(Request request, Response response) { RequestPattern requestPattern = buildRequestPatternFrom(request); if (requestNotAlreadyReceived(requestPattern) && response.isFromProxy()) { notifier().info(String.format("Recording mappings for %s", request.getUrl())); writeToMappingAndBodyFile(request, response, requestPattern); } else { notifier().info(String.format("Not recording mapping for %s as this has already been received", request.getUrl())); } }
public RemoteServiceEndpoint(WireMockServer service, final String path) { this.listener = new WireMock("localhost", service.port()); this.path = path; this.url = URI.create(String.format("http://localhost:%d%s", service.port(), path)); this.service = service; service.resetMappings(); service.resetRequests(); service.resetScenarios(); service.addMockServiceRequestListener((request, response) -> { if (path.equals(request.getUrl())) { receivedRequests.add(LoggedRequest.createFrom(request)); } }); }
public RemoteServiceEndpoint(WireMockServer service, final String path) { this.listener = new WireMock("localhost", service.port()); this.path = path; this.url = URI.create(String.format("http://localhost:%d%s", service.port(), path)); this.service = service; service.resetMappings(); service.resetRequests(); service.resetScenarios(); service.addMockServiceRequestListener((request, response) -> { if (path.equals(request.getUrl())) { receivedRequests.add(LoggedRequest.createFrom(request)); } }); }
public static LoggedRequest createFrom(Request request) { return new LoggedRequest(request.getUrl(), request.getAbsoluteUrl(), request.getMethod(), request.getClientIp(), copyOf(request.getHeaders()), ImmutableMap.copyOf(request.getCookies()), request.isBrowserProxyRequest(), new Date(), request.getBody(), request.getParts() ); }
/** * Builds a {@link Request} for the OpenAPI validator out of the * original {@link com.github.tomakehurst.wiremock.http.Request}. * * @param originalRequest the original {@link com.github.tomakehurst.wiremock.http.Request} */ @Nonnull public static Request of(@Nonnull final com.github.tomakehurst.wiremock.http.Request originalRequest) { requireNonNull(originalRequest, "An original request is required"); final URI uri = URI.create(originalRequest.getUrl()); final Map<String, QueryParameter> queryParameterMap = Urls.splitQuery(uri); final SimpleRequest.Builder builder = new SimpleRequest.Builder(originalRequest.getMethod().getName(), uri.getPath()) .withBody(originalRequest.getBodyAsString()); originalRequest.getHeaders().all().forEach(header -> builder.withHeader(header.key(), header.values())); queryParameterMap.forEach((key, value) -> builder.withQueryParam(key, value.values())); return builder.build(); } }
/** * Returns a RequestPatternBuilder matching a given Request */ @Override public RequestPatternBuilder apply(Request request) { final RequestPatternBuilder builder = new RequestPatternBuilder(request.getMethod(), urlEqualTo(request.getUrl())); if (headers != null && !headers.isEmpty()) { for (Map.Entry<String, CaptureHeadersSpec> header : headers.entrySet()) { String headerName = header.getKey(); if (request.containsHeader(headerName)) { CaptureHeadersSpec spec = header.getValue(); StringValuePattern headerMatcher = new EqualToPattern(request.getHeader(headerName), spec.getCaseInsensitive()); builder.withHeader(headerName, headerMatcher); } } } byte[] body = request.getBody(); if (bodyPatternFactory != null && body != null && body.length > 0) { builder.withRequestBody(bodyPatternFactory.forRequest(request)); } return builder; } }
@Override public MatchResult match(Request request) { List<WeightedMatchResult> matchResults = new ArrayList<>(asList( weight(RequestPattern.this.url.match(request.getUrl()), 10.0), weight(RequestPattern.this.method.match(request.getMethod()), 3.0), weight(allHeadersMatchResult(request)), weight(allQueryParamsMatch(request)), weight(allCookiesMatch(request)), weight(allBodyPatternsMatch(request)), weight(allMultipartPatternsMatch(request)) )); if (hasInlineCustomMatcher) { matchResults.add(weight(customMatcher.match(request))); } return MatchResult.aggregateWeighted(matchResults); }
private void writeToMappingAndBodyFile(Request request, Response response, RequestPattern requestPattern) { String fileId = idGenerator.generate(); byte[] body = bodyDecompressedIfRequired(response); String mappingFileName = UniqueFilenameGenerator.generate(request.getUrl(), "mapping", fileId); String bodyFileName = UniqueFilenameGenerator.generate( request.getUrl(), "body", fileId, ContentTypes.determineFileExtension( request.getUrl(), response.getHeaders().getContentTypeHeader(), body)); ResponseDefinitionBuilder responseDefinitionBuilder = responseDefinition() .withStatus(response.getStatus()) .withBodyFile(bodyFileName); if (response.getHeaders().size() > 0) { responseDefinitionBuilder.withHeaders(withoutContentEncodingAndContentLength(response.getHeaders())); } ResponseDefinition responseToWrite = responseDefinitionBuilder.build(); StubMapping mapping = new StubMapping(requestPattern, responseToWrite); mapping.setUuid(UUID.nameUUIDFromBytes(fileId.getBytes())); filesFileSource.writeBinaryFile(bodyFileName, body); mappingsFileSource.writeTextFile(mappingFileName, write(mapping)); }
private RequestPattern buildRequestPatternFrom(Request request) { RequestPatternBuilder builder = newRequestPattern(request.getMethod(), urlEqualTo(request.getUrl())); if (!headersToMatch.isEmpty()) { for (HttpHeader header: request.getHeaders().all()) { if (headersToMatch.contains(header.caseInsensitiveKey())) { builder.withHeader(header.key(), equalTo(header.firstValue())); } } } if (request.isMultipart()) { for (Request.Part part : request.getParts()) { builder.withRequestBodyPart(valuePatternForPart(part)); } } else { String body = request.getBodyAsString(); if (!body.isEmpty()) { builder.withRequestBody(valuePatternForContentType(request)); } } return builder.build(); }