/** * Creates a new {@code OperationRequest} based on the given {@code original} but with * the given {@code newParameters}. * @param original the original request * @param newParameters the new parameters * @return the new request with the new parameters */ public OperationRequest createFrom(OperationRequest original, Parameters newParameters) { return new StandardOperationRequest(original.getUri(), original.getMethod(), original.getContent(), original.getHeaders(), newParameters, original.getParts(), original.getCookies()); }
private void writeOptions(OperationRequest request, PrintWriter writer) { if (!request.getParts().isEmpty() || (!request.getParameters().getUniqueParameters(request.getUri()) .isEmpty() && !includeParametersInUri(request) && includeParametersAsFormOptions(request))) { writer.print("--form "); } }
private String getRequestBody(OperationRequest request) { StringWriter httpRequest = new StringWriter(); PrintWriter writer = new PrintWriter(httpRequest); String content = request.getContentAsString(); if (StringUtils.hasText(content)) { writer.printf("%n%s", content); } else if (isPutOrPost(request)) { if (request.getParts().isEmpty()) { String queryString = request.getParameters().toQueryString(); if (StringUtils.hasText(queryString)) { writer.println(); writer.print(queryString); } } else { writeParts(request, writer); } } return httpRequest.toString(); }
/** * Creates a new {@code OperationRequest} based on the given {@code original} but with * the given {@code newHeaders}. * @param original the original request * @param newHeaders the new headers * @return the new request with the new headers */ public OperationRequest createFrom(OperationRequest original, HttpHeaders newHeaders) { return new StandardOperationRequest(original.getUri(), original.getMethod(), original.getContent(), newHeaders, original.getParameters(), original.getParts(), original.getCookies()); }
private boolean includeParametersInUri(OperationRequest request) { return request.getMethod() == HttpMethod.GET || (request.getContent().length > 0 && !MediaType.APPLICATION_FORM_URLENCODED .isCompatibleWith(request.getHeaders().getContentType())); }
private String getUrl(OperationRequest request) { Parameters uniqueParameters = request.getParameters() .getUniqueParameters(request.getUri()); if (!uniqueParameters.isEmpty() && includeParametersInUri(request)) { return String.format("'%s%s%s'", request.getUri(), StringUtils.hasText(request.getUri().getRawQuery()) ? "&" : "?", uniqueParameters.toQueryString()); } return String.format("'%s'", request.getUri()); }
@Test public void getRequestWithQueryStringPopulatesParameters() throws Exception { OperationRequest request = createOperationRequest( MockMvcRequestBuilders.get("/foo?a=alpha&b=bravo")); assertThat(request.getUri()) .isEqualTo(URI.create("http://localhost/foo?a=alpha&b=bravo")); assertThat(request.getParameters().size()).isEqualTo(2); assertThat(request.getParameters()).containsEntry("a", Arrays.asList("alpha")); assertThat(request.getParameters()).containsEntry("b", Arrays.asList("bravo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); }
@Test public void requestUriHostCanBeModified() { this.preprocessor.host("api.example.com"); OperationRequest processed = this.preprocessor .preprocess(createRequestWithUri("http://api.foo.com:12345")); assertThat(processed.getUri()) .isEqualTo(URI.create("http://api.example.com:12345")); assertThat(processed.getHeaders().getFirst(HttpHeaders.HOST)) .isEqualTo("api.example.com:12345"); }
@Test public void requestWithCookies() throws Exception { ExchangeResult result = WebTestClient .bindToRouterFunction(RouterFunctions.route(GET("/foo"), (req) -> null)) .configureClient().baseUrl("http://localhost").build().get().uri("/foo") .cookie("cookieName1", "cookieVal1").cookie("cookieName2", "cookieVal2") .exchange().expectBody().returnResult(); assertThat(result.getRequestHeaders().get(HttpHeaders.COOKIE)).isNotNull(); OperationRequest request = this.converter.convert(result); assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); assertThat(request.getCookies()).hasSize(2); assertThat(request.getHeaders().get(HttpHeaders.COOKIE)).isNull(); assertThat(request.getCookies()).extracting("name").containsExactly("cookieName1", "cookieName2"); assertThat(request.getCookies()).extracting("value").containsExactly("cookieVal1", "cookieVal2"); }
@Test public void mockMultipartFileUploadWithContentType() throws Exception { OperationRequest request = createOperationRequest( MockMvcRequestBuilders.multipart("/foo").file(new MockMultipartFile( "file", "original", "image/png", new byte[] { 1, 2, 3, 4 }))); assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.POST); assertThat(request.getParts().size()).isEqualTo(1); OperationRequestPart part = request.getParts().iterator().next(); assertThat(part.getName()).isEqualTo("file"); assertThat(part.getSubmittedFileName()).isEqualTo("original"); assertThat(part.getHeaders().getContentType()).isEqualTo(MediaType.IMAGE_PNG); assertThat(part.getContent()).isEqualTo(new byte[] { 1, 2, 3, 4 }); }
@Override public Collection<OperationRequestPart> getParts() { return this.delegate.getParts(); }
private List<Map<String, String>> getHeaders(OperationRequest request) { List<Map<String, String>> headers = new ArrayList<>(); for (Entry<String, List<String>> header : request.getHeaders().entrySet()) { for (String value : header.getValue()) { if (HttpHeaders.CONTENT_TYPE.equals(header.getKey()) && !request.getParts().isEmpty()) { headers.add(header(header.getKey(), String.format("%s; boundary=%s", value, MULTIPART_BOUNDARY))); } else { headers.add(header(header.getKey(), value)); } } } for (RequestCookie cookie : request.getCookies()) { headers.add(header(HttpHeaders.COOKIE, String.format("%s=%s", cookie.getName(), cookie.getValue()))); } if (requiresFormEncodingContentTypeHeader(request)) { headers.add(header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE)); } return headers; }
@Test public void requestWithHeaders() throws Exception { OperationRequest request = createOperationRequest(MockMvcRequestBuilders .get("/foo").header("a", "alpha", "apple").header("b", "bravo")); assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); assertThat(request.getHeaders()).containsEntry("a", Arrays.asList("alpha", "apple")); assertThat(request.getHeaders()).containsEntry("b", Arrays.asList("bravo")); }
@Override public OperationRequest preprocess(OperationRequest request) { Parameters parameters = new Parameters(); parameters.putAll(request.getParameters()); for (Modification modification : this.modifications) { modification.apply(parameters); } return this.requestFactory.createFrom(request, parameters); }
@Test public void requestWithCookies() throws Exception { OperationRequest request = createOperationRequest( MockMvcRequestBuilders.get("/foo").cookie( new javax.servlet.http.Cookie("cookieName1", "cookieVal1"), new javax.servlet.http.Cookie("cookieName2", "cookieVal2"))); assertThat(request.getUri()).isEqualTo(URI.create("http://localhost/foo")); assertThat(request.getMethod()).isEqualTo(HttpMethod.GET); assertThat(request.getCookies().size()).isEqualTo(2); Iterator<RequestCookie> cookieIterator = request.getCookies().iterator(); RequestCookie cookie1 = cookieIterator.next(); assertThat(cookie1.getName()).isEqualTo("cookieName1"); assertThat(cookie1.getValue()).isEqualTo("cookieVal1"); RequestCookie cookie2 = cookieIterator.next(); assertThat(cookie2.getName()).isEqualTo("cookieName2"); assertThat(cookie2.getValue()).isEqualTo("cookieVal2"); }
private void writeHeaders(OperationRequest request, List<String> lines) { HttpHeaders headers = request.getHeaders(); for (Entry<String, List<String>> entry : headers.entrySet()) { for (String header : entry.getValue()) { // HTTPie adds Content-Type automatically with --form if (!request.getParts().isEmpty() && entry.getKey().equals(HttpHeaders.CONTENT_TYPE) && header.startsWith(MediaType.MULTIPART_FORM_DATA_VALUE)) { continue; } lines.add(String.format("'%s:%s'", entry.getKey(), header)); } } }
CliOperationRequest(OperationRequest delegate) { this.delegate = delegate; this.headerFilters = new HashSet<>(Arrays.asList( new NamedHeaderFilter(HttpHeaders.CONTENT_LENGTH), new BasicAuthHeaderFilter(), new HostHeaderFilter(delegate.getUri()))); }
private boolean requiresFormEncodingContentTypeHeader(OperationRequest request) { return request.getHeaders().get(HttpHeaders.CONTENT_TYPE) == null && isPutOrPost(request) && (!request.getParameters().isEmpty() && !includeParametersInUri(request)); }
@Test public void modifyRequestContent() { OperationRequest request = this.requestFactory.create( URI.create("http://localhost"), HttpMethod.GET, "content".getBytes(), new HttpHeaders(), new Parameters(), Collections.<OperationRequestPart>emptyList()); OperationRequest preprocessed = this.preprocessor.preprocess(request); assertThat(preprocessed.getContent()).isEqualTo("modified".getBytes()); }