public HttpResponse build() { return new HttpResponseImpl(this); } }
public HttpRequest build() { return new HttpRequestImpl(this); } }
public HttpConfig build() { return new HttpConfig(this); } }
@Override public HttpToolResponse call() throws Exception { if (log.isTraceEnabled()) log.trace("http polling for {} sensors at {}", entity, pollInfo); UsernamePassword creds = null; if (pollInfo.credentials.isPresent()) { creds = new UsernamePassword( pollInfo.credentials.get().getUserPrincipal().getName(), pollInfo.credentials.get().getPassword()); } HttpResponse response = pollInfo.httpExecutor.execute(new HttpRequest.Builder() .headers(pollInfo.headers) .uri(pollInfo.uriProvider.get()) .credentials(creds) .method(pollInfo.method) .body(pollInfo.body) .config(HttpConfig.builder() .trustSelfSigned(true) .trustAll(true) .laxRedirect(true) .build()) .build()); return createHttpToolRespose(response); }}; getPoller().scheduleAtFixedRate(pollJob, new DelegatingPollHandler<HttpToolResponse>(handlers), minPeriod);
final HttpResponse response = httpExecutor.execute(new HttpRequest.Builder() .headers(headersMap) .uri(URI.create(request.getUrl())) .method(request.getMethod()) .body(content) .build()); for (Map.Entry<String, String> entry: response.headers().entries()) { responseHeaders.add(new Header(entry.getKey(), entry.getValue())); TypedInput responseBody = new TypedByteArray(mimeType, ByteStreams.toByteArray(response.getContent())); return new Response(request.getUrl(), response.code(), (response.reasonPhrase() != null) ? response.reasonPhrase() : "", responseHeaders, responseBody);
String authEncoded = Base64.encodeBase64String(Strings.toByteArray(authUnencoded)); HttpExecutor executor = factory.getHttpExecutor(getProps()); HttpRequest executorRequest = new HttpRequest.Builder().headers(ImmutableMap.of("RequestHeader", "RequestHeaderValue")) .method("GET") .uri(baseUrl.toURI()) .credentials(new UsernamePassword("brooklyn", "apache")) .build(); HttpResponse executorResponse = executor.execute(executorRequest); firstServerResponse, executorRequest, new HttpResponse.Builder() .header("WWW-Authenticate", "Basic realm=\"User Visible Realm\"") .header("Content-Length", "" + "Not Authenticated".length()) .content("Not Authenticated".getBytes()) .build()); ArrayListMultimap newHeaders = ArrayListMultimap.create(executorRequest.headers()); newHeaders.put("Authorization", "Basic " + authEncoded); assertRequestAndResponse(recordedSecondRequest, secondServerResponse, new HttpRequest.Builder().from((HttpRequestImpl)executorRequest).headers(newHeaders).build(), executorResponse);
@Test public void testHttpPutRequest() throws Exception { MockResponse serverResponse = new MockResponse().setResponseCode(200).addHeader(HTTP_RESPONSE_HEADER_KEY, HTTP_RESPONSE_HEADER_VALUE).setBody(HTTP_BODY); server.enqueue(serverResponse); HttpExecutor executor = factory.getHttpExecutor(getProps()); HttpRequest executorRequest = new HttpRequest.Builder() .method("PUT") .uri(baseUrl.toURI()) .build(); HttpResponse executorResponse = executor.execute(executorRequest); assertRequestAndResponse(server.takeRequest(), serverResponse, executorRequest, executorResponse); }
@Test public void testHttpResponse() throws Exception { Multimap<String, String> responseHeaders = ArrayListMultimap.<String, String>create(); responseHeaders.put(HTTP_RESPONSE_CUSTOM_HEADER_KEY, HTTP_RESPONSE_CUSTOM_HEADER_VALUE); HttpResponse httpResponse = new HttpResponse.Builder() .headers(responseHeaders) .header(HTTP_RESPONSE_HEADER_KEY, HTTP_RESPONSE_HEADER_VALUE) .build(); MockResponse serverResponse = new MockResponse() .setResponseCode(200) .setBody(HTTP_BODY); for (Map.Entry<String, String> entry : httpResponse.headers().entries()) { serverResponse.addHeader(entry.getKey(), entry.getValue()); } server.enqueue(serverResponse); HttpExecutor executor = factory.getHttpExecutor(getProps()); HttpRequest executorRequest = new HttpRequest.Builder() .method("GET") .uri(baseUrl.toURI()) .build(); HttpResponse executorResponse = executor.execute(executorRequest); Multimap<String, String> actualHeaders = executorResponse.headers(); assertEquals(Iterables.getOnlyElement(actualHeaders.get(HTTP_RESPONSE_CUSTOM_HEADER_KEY)), HTTP_RESPONSE_CUSTOM_HEADER_VALUE); assertEquals(Iterables.getOnlyElement(actualHeaders.get(HTTP_RESPONSE_HEADER_KEY)), HTTP_RESPONSE_HEADER_VALUE); }
@Test public void testHttpPostRequest() throws Exception { MockResponse serverResponse = new MockResponse().setResponseCode(200).addHeader(HTTP_RESPONSE_HEADER_KEY, HTTP_RESPONSE_HEADER_VALUE).setBody(HTTP_BODY); server.enqueue(serverResponse); HttpExecutor executor = factory.getHttpExecutor(getProps()); HttpRequest executorRequest = new HttpRequest.Builder().headers(ImmutableMap.of("RequestHeader", "RequestHeaderValue")) .method("POST") .body(HTTP_BODY.getBytes()) .uri(baseUrl.toURI()) .build(); HttpResponse executorResponse = executor.execute(executorRequest); assertRequestAndResponse(server.takeRequest(), serverResponse, executorRequest, executorResponse); // Big POST request with random bytes serverResponse = new MockResponse().setResponseCode(200).addHeader(HTTP_RESPONSE_HEADER_KEY + "Test", HTTP_RESPONSE_HEADER_VALUE).setBody(HTTP_BODY); server.enqueue(serverResponse); executor = factory.getHttpExecutor(getProps()); byte[] requestBody = new byte[10 * 1024 * 1024]; Random r = new Random(); for (int i = 0; i < requestBody.length; i++) { requestBody[i] = (byte)(r.nextInt() % 256); } executorRequest = new HttpRequest.Builder() .method("POST") .body(requestBody) .uri(baseUrl.toURI()) .build(); executorResponse = executor.execute(executorRequest); assertRequestAndResponse(server.takeRequest(), serverResponse, executorRequest, executorResponse); }
@Override public HttpResponse execute(HttpRequest request) throws IOException { HttpConfig config = (request.config() != null) ? request.config() : DEFAULT_CONFIG; Credentials creds = (request.credentials() != null) ? new UsernamePasswordCredentials(request.credentials().getUser(), request.credentials().getPassword()) : null; HttpClient httpClient = HttpTool.httpClientBuilder() .uri(request.uri()) .credential(Optional.fromNullable(creds)) .laxRedirect(config.laxRedirect()) .trustSelfSigned(config.trustSelfSigned()) .trustAll(config.trustAll()) .build(); switch (request.method().toUpperCase()) { case HttpExecutor.GET: response = HttpTool.httpGet(httpClient, request.uri(), request.headers()); break; case HttpExecutor.HEAD: response = HttpTool.httpHead(httpClient, request.uri(), request.headers()); break; case HttpExecutor.POST: response = HttpTool.httpPost(httpClient, request.uri(), request.headers(), orEmpty(request.body())); break; case HttpExecutor.PUT: response = HttpTool.httpPut(httpClient, request.uri(), request.headers(), orEmpty(request.body())); break; case HttpExecutor.DELETE: response = HttpTool.httpDelete(httpClient, request.uri(), request.headers()); break; default: throw new IllegalArgumentException("Unsupported method '"+request.method()+"' for URI "+request.uri());
private void assertRequestAndResponse(RecordedRequest serverRequest, MockResponse serverResponse, HttpRequest executorRequest, HttpResponse executorResponse) throws Exception { assertEquals(serverRequest.getMethod(), executorRequest.method()); Function<Map.Entry<String, String>, String> headersMapper = new Function<Map.Entry<String, String>, String>() { @Nullable @Override public String apply(@Nullable Map.Entry<String, String> input) { return input.getKey() + ": " + input.getValue(); } }; assertTrue(serverRequest.getHeaders().containsAll(Collections2.transform(executorRequest.headers().entries(), headersMapper))); assertEquals(serverRequest.getPath(), executorRequest.uri().getPath()); if (executorRequest.body() != null) { assertEquals(serverRequest.getBody(), executorRequest.body()); } else { assertEquals(serverRequest.getBody(), new byte[0]); } assertEquals(serverResponse.getBody(), ByteStreams.toByteArray(executorResponse.getContent())); assertTrue(serverResponse.getHeaders().containsAll(Collections2.transform(executorResponse.headers().entries(), headersMapper))); assertTrue(Collections2.transform(executorResponse.headers().entries(), headersMapper).containsAll(serverResponse.getHeaders())); }
@SuppressWarnings("unchecked") private HttpToolResponse createHttpToolRespose(HttpResponse response) throws IOException { int responseCode = response.code(); Map<String,? extends List<String>> headers = (Map<String, List<String>>) (Map<?, ?>) response.headers().asMap(); byte[] content = null; final long durationMillisOfFirstResponse; final long durationMillisOfFullContent; final long startTime = System.currentTimeMillis(); ByteArrayOutputStream out = new ByteArrayOutputStream(); durationMillisOfFirstResponse = Duration.sinceUtc(startTime).toMilliseconds(); try { ByteStreams.copy(response.getContent(), out); content = out.toByteArray(); } catch (IOException e) { throw Throwables.propagate(e); } finally { Streams.closeQuietly(out); } durationMillisOfFullContent = Duration.sinceUtc(startTime).toMilliseconds(); return new HttpToolResponse(responseCode, headers, content, startTime, durationMillisOfFirstResponse, durationMillisOfFullContent); } }
@Override public Object call() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); try { HttpResponse response = httpExecutor.execute(request); validateResponse(response); ByteStreams.copy(response.getContent(), out); return new String(out.toByteArray()); } catch (IOException e) { throw Exceptions.propagate(e); } } }).build();
private void validateResponse(HttpResponse response) { int statusCode = response.code(); if (statusCode == 401) { throw new RuntimeException("Authorization exception"); } else if (statusCode == 404) { throw new RuntimeException("Resource not found"); } else if (statusCode >= 500) { throw new RuntimeException("Server error"); } }
public Builder headers(Map<String, String> val) { if (checkNotNull(val, "headers").keySet().contains(null)) { throw new NullPointerException("Headers must not contain null key"); } for (Map.Entry<String, String> entry : val.entrySet()) { header(entry.getKey(), entry.getValue()); } return this; }
public static Builder builder() { return new Builder(); }
public Builder headers(Map<String, String> val) { if (checkNotNull(val, "headers").keySet().contains(null)) { throw new NullPointerException("Headers must not contain null key"); } for (Map.Entry<String, String> entry : val.entrySet()) { header(entry.getKey(), entry.getValue()); } return this; }
private HttpRequest buildHttpRequest(String httpVerb, URI uri, Map<String, String> headers, String httpUsername, String httpPassword, Object payload) { HttpRequest.Builder httpRequestBuilder = new HttpRequest.Builder() .uri(uri) .method(httpVerb) .config(HttpConfig.builder() .trustSelfSigned(true) .trustAll(true) .laxRedirect(true) .build()); httpRequestBuilder.headers(headers); body = payload.toString(); httpRequestBuilder.body(body.getBytes()); httpRequestBuilder.credentials(new UsernamePassword(httpUsername, httpPassword)); return httpRequestBuilder.build();
@Test public void testHttpRequest() throws Exception { MockResponse serverResponse = new MockResponse().setResponseCode(200).addHeader(HTTP_RESPONSE_HEADER_KEY, HTTP_RESPONSE_HEADER_VALUE).setBody(HTTP_BODY); server.enqueue(serverResponse); HttpExecutor executor = factory.getHttpExecutor(getProps()); HttpRequest executorRequest = new HttpRequest.Builder() .method("GET") .uri(baseUrl.toURI()) .build(); HttpResponse executorResponse = executor.execute(executorRequest); assertRequestAndResponse(server.takeRequest(), serverResponse, executorRequest, executorResponse); }
@Test public void testHttpDeleteRequest() throws Exception { MockResponse serverResponse = new MockResponse().setResponseCode(200).addHeader(HTTP_RESPONSE_HEADER_KEY, HTTP_RESPONSE_HEADER_VALUE).setBody(HTTP_BODY); server.enqueue(serverResponse); HttpExecutor executor = factory.getHttpExecutor(getProps()); HttpRequest executorRequest = new HttpRequest.Builder() .method("DELETE") .uri(baseUrl.toURI()) .build(); HttpResponse executorResponse = executor.execute(executorRequest); assertRequestAndResponse(server.takeRequest(), serverResponse, executorRequest, executorResponse); // No Headers returned serverResponse = new MockResponse().setResponseCode(200).setBody(HTTP_BODY); server.enqueue(serverResponse); executor = factory.getHttpExecutor(getProps()); executorRequest = new HttpRequest.Builder() .method("DELETE") .uri(baseUrl.toURI()) .build(); executorResponse = executor.execute(executorRequest); assertRequestAndResponse(server.takeRequest(), serverResponse, executorRequest, executorResponse); }