@Override public byte[] getBody() { return target.getBody(); }
@Override public ResponseDefinition execute(Admin admin, Request request, PathParams pathParams) { RecordSpec recordSpec = request.getBody().length == 0 ? RecordSpec.DEFAULTS : Json.read(request.getBodyAsString(), RecordSpec.class); SnapshotRecordResult result = admin.snapshotRecord(recordSpec); return jsonResponse(result, HTTP_OK); } }
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(); }
@SuppressWarnings("unchecked") private MatchResult allBodyPatternsMatch(final Request request) { if (bodyPatterns != null && !bodyPatterns.isEmpty() && request.getBody() != null) { return MatchResult.aggregate( from(bodyPatterns).transform(new Function<ContentPattern, MatchResult>() { @Override public MatchResult apply(ContentPattern pattern) { if (StringValuePattern.class.isAssignableFrom(pattern.getClass())) { return pattern.match(request.getBodyAsString()); } return ((BinaryEqualToPattern) pattern).match(request.getBody()); } }).toList() ); } return MatchResult.exactMatch(); }
/** * If request body was JSON or XML, use "equalToJson" or "equalToXml" (respectively) in the RequestPattern so it's * easier to read. Otherwise, just use "equalTo" */ @Override public ContentPattern<?> forRequest(Request request) { final String mimeType = request.getHeaders().getContentTypeHeader().mimeTypePart(); if (mimeType != null) { if (mimeType.contains("json")) { return new EqualToJsonPattern(request.getBodyAsString(), ignoreArrayOrder, ignoreExtraElements); } else if (mimeType.contains("xml")) { return new EqualToXmlPattern(request.getBodyAsString()); } else if (mimeType.equals("multipart/form-data")) { // TODO: Need to add a matcher that can handle multipart data properly. For now, just always match return new AnythingPattern(); } else if (!determineIsTextFromMimeType(mimeType)) { return new BinaryEqualToPattern(request.getBody()); } } return new EqualToPattern(request.getBodyAsString(), caseInsensitive); } }
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()) ); }
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() ); }
/** * 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 ResponseDefinition execute(Admin admin, Request request, PathParams pathParams) { byte[] fileContent = request.getBody(); FileSource fileSource = admin.getOptions().filesRoot().child(FILES_ROOT); fileSource.writeBinaryFile(pathParams.get("filename"), fileContent); return ResponseDefinition.okForJson(fileContent); } }
addBodySection(bodyPatterns, new Body(request.getBody()), builder);