/** * Return the {@code 'Content-Length'} header value. * * @return the content-length if present */ public Optional<Integer> contentLength() { return header(CONTENT_LENGTH).map(Integer::valueOf); }
@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())); }
@Override public ContentTypeHeader contentTypeHeader() { return styxRequest.header(CONTENT_TYPE) .map(ContentTypeHeader::new) .orElseGet(ContentTypeHeader::absent); }
@Override public String getHeader(String key) { return styxRequest.header(key).orElse(null); }
private HttpRequest addUserAgent(HttpRequest request) { return Optional.of(request) .filter(req -> !req.header(USER_AGENT).isPresent()) .flatMap(req -> userAgent.map(userAgent -> addUserAgent(request, userAgent))) .orElse(request); }
@Override public String getAbsoluteUrl() { String host = styxRequest.header(HOST).orElse(""); String protocol = "http"; return protocol + "://" + host + styxRequest.url().toURI().toString(); }
private io.netty.handler.codec.http.HttpRequest makeRequest(HttpRequest request) { DefaultHttpRequest nettyRequest = toNettyRequest(request); Optional<String> host = request.header(HOST); if (!host.isPresent()) { nettyRequest.headers().set(HOST, nettyConnection.getOrigin().hostAsString()); } return nettyRequest; } }
private static Origin originFromRequest(HttpRequest request) { String hostAndPort = request.header(HOST) .orElseGet(() -> { checkArgument(request.url().isAbsolute(), "host header is not set for request=%s", request); return request.url().authority().map(Url.Authority::hostAndPort) .orElseThrow(() -> new IllegalArgumentException("Cannot send request " + request + " as URL is not absolute and no HOST header is present")); }); return newOriginBuilder(HostAndPort.fromString(hostAndPort)).build(); }
@Test public void contentFromStringOnlySetsContentLength() { HttpRequest request = HttpRequest.get("/") .body("Response content.", UTF_16) .build(); assertThat(request.body(), is("Response content.".getBytes(UTF_16))); assertThat(request.header("Content-Length"), is(Optional.of("36"))); }
@Test public void contentFromStringSetsContentLengthIfRequired() { HttpRequest request1 = HttpRequest.get("/") .body("Response content.", UTF_8, true) .build(); assertThat(request1.header("Content-Length"), is(Optional.of("17"))); HttpRequest request2 = HttpRequest.get("/") .body("Response content.", UTF_8, false) .build(); assertThat(request2.header("Content-Length"), is(Optional.empty())); }
@Test public void contentFromByteArraySetsContentLengthIfRequired() { HttpRequest response1 = HttpRequest.get("/") .body("Response content.".getBytes(UTF_16), true) .build(); assertThat(response1.body(), is("Response content.".getBytes(UTF_16))); assertThat(response1.header("Content-Length"), is(Optional.of("36"))); HttpRequest response2 = HttpRequest.get("/") .body("Response content.".getBytes(UTF_8), false) .build(); assertThat(response2.body(), is("Response content.".getBytes(UTF_8))); assertThat(response2.header("Content-Length"), is(Optional.empty())); }
@Test public void setsHostHeaderFromAuthorityIfSet() { HttpRequest request = get("http://www.hotels.com").build(); assertThat(request.header(HOST), isValue("www.hotels.com")); }