Builder(HttpRequest request) { this.id = request.id(); this.method = httpMethod(request.method().name()); this.clientAddress = request.clientAddress(); this.url = request.url(); this.secure = request.isSecure(); this.version = httpVersion(request.version().toString()); this.headers = request.headers().newBuilder(); this.body = request.body().content(); this.cookies = new ArrayList<>(request.cookies()); }
@Override public String getBodyAsString() { return styxRequest.bodyAs(UTF_8); }
@Test public void createsARequestWithDefaultValues() { HttpRequest request = get("/index").build(); assertThat(request.version(), is(HTTP_1_1)); assertThat(request.url().toString(), is("/index")); assertThat(request.path(), is("/index")); assertThat(request.id(), is(notNullValue())); assertThat(request.cookies(), is(emptyIterable())); assertThat(request.headers(), is(emptyIterable())); assertThat(request.headers("any"), is(emptyIterable())); assertThat(request.body().length, is(0)); assertThat(request.cookie("any"), isAbsent()); assertThat(request.header("any"), isAbsent()); assertThat(request.keepAlive(), is(true)); assertThat(request.method(), is(GET)); assertThat(request.queryParam("any"), isAbsent()); assertThat(request.queryParams("any"), is(emptyIterable())); }
@VisibleForTesting static DefaultHttpRequest toNettyRequest(HttpRequest request) { DefaultHttpRequest nettyRequest = new DefaultHttpRequest(request.version(), request.method(), request.url().toString(), false); request.headers().forEach((name, value) -> nettyRequest.headers().add(name, value)); Cookie[] cookies = request.cookies().stream() .map(HttpRequestOperation::styxCookieToNettyCookie) .toArray(Cookie[]::new); if (cookies.length > 0) { nettyRequest.headers().set(COOKIE, ClientCookieEncoder.LAX.encode(cookies)); } return nettyRequest; }
@Test public void createsRequestBuilderFromRequest() { HttpRequest originalRequest = get("/home") .cookies(requestCookie("fred", "blogs")) .header("some", "header") .build(); HttpRequest clonedRequest = originalRequest.newBuilder().build(); assertThat(clonedRequest.method(), is(originalRequest.method())); assertThat(clonedRequest.url(), is(originalRequest.url())); assertThat(clonedRequest.headers().toString(), is(originalRequest.headers().toString())); assertThat(clonedRequest.body(), is(originalRequest.body())); }
private static Info information(HttpRequest request, Origin origin, boolean longFormatEnabled) { Info info = new Info() .add("method", request.method()) .add("secure", request.isSecure()) .add("uri", request.url()) .add("origin", origin != null ? origin.hostAsString() : "N/A"); if (longFormatEnabled) { info.add("headers", request.headers()) .add("cookies", request.cookies()); } return info; }
private FlowControllingHttpContentProducer createProducer(ChannelHandlerContext ctx, HttpRequest request) { String requestPrefix = request != null ? format("Request(method=%s, url=%s, id=%s)", request.method(), request.url(), request.id()) : "Request NA"; String loggingPrefix = format("%s -> %s", ctx.channel().remoteAddress(), ctx.channel().localAddress()); Runnable askForMore = this.flowControlEnabled ? () -> ctx.channel().read() : () -> { }; return new FlowControllingHttpContentProducer( askForMore, () -> { ctx.channel().config().setAutoRead(true); emitResponseCompleted(); }, this::emitResponseError, () -> scheduleResourcesTearDown(ctx), format("%s, %s", loggingPrefix, requestPrefix), origin); }
@Test public void newCookiesWithDuplicateNamesOverridePreviousOnes() { HttpRequest r1 = HttpRequest.get("/") .cookies(requestCookie("y", "y1")) .build(); HttpRequest r2 = r1.newBuilder().addCookies( requestCookie("y", "y2")) .build(); assertThat(r2.cookies(), containsInAnyOrder(requestCookie("y", "y2"))); }
/** * Rewrites the URL of the request according to the rewrite rules. * * @param request a request * @return a rewritten request */ public HttpRequest rewrite(HttpRequest request) { String path = request.path(); String newPath = newPath(path); if (!Objects.equals(newPath, path)) { Url newUrl = request.url().newBuilder().path(newPath).build(); return request.newBuilder() .url(newUrl) .build(); } return request; }
private void prepareRequest(HttpURLConnection connection, HttpRequest request) throws IOException { connection.setRequestMethod(request.method().name()); connection.setRequestProperty("Connection", "close"); connection.setDoInput(true); for (HttpHeader httpHeader : request.headers()) { connection.addRequestProperty(httpHeader.name(), httpHeader.value()); } }
@Test public void canRemoveAHeader() { Object hdValue = "b"; HttpRequest request = get("/") .header("a", hdValue) .addHeader("c", hdValue) .build(); HttpRequest shouldRemoveHeader = request.newBuilder() .removeHeader("c") .build(); assertThat(shouldRemoveHeader.headers(), contains(header("a", "b"))); }
private static HttpHandler newHandler(String originId, RequestHandler wireMockHandler) { return (httpRequest, ctx) -> httpRequest.aggregate(MAX_CONTENT_LENGTH) .map(fullRequest -> { LOGGER.info("{} received: {}\n{}", new Object[]{originId, fullRequest.url(), fullRequest.body()}); return fullRequest; }) .flatMap(fullRequest -> { Request wmRequest = new WiremockStyxRequestAdapter(fullRequest); com.github.tomakehurst.wiremock.http.Response wmResponse = wireMockHandler.handle(wmRequest); return Eventual.of(toStyxResponse(wmResponse).stream()); }); }
@Test public void transformedBodyIsNewCopy() { HttpRequest request = get("/foo") .body("Original body", UTF_8) .build(); HttpRequest newRequest = request.newBuilder() .body("New body", UTF_8) .build(); assertThat(request.bodyAs(UTF_8), is("Original body")); assertThat(newRequest.bodyAs(UTF_8), is("New body")); }
@Test public void createsANewRequestWithSameVersionAsBefore() { HttpRequest v10Request = get("/foo/bar").version(HTTP_1_0).build(); HttpRequest newRequest = v10Request.newBuilder().uri("/blah/blah").build(); assertThat(newRequest.version(), is(HTTP_1_0)); }
@Override public HttpHeader header(String key) { List<String> values = styxRequest.headers(key); return httpHeader(key, values.toArray(new String[values.size()])); }