URLConnectionHttpClientWrapper.java
- /*
- * Copyright (C) 2021 B3Partners B.V.
- *
- * SPDX-License-Identifier: MIT
- *
- */
- package nl.b3p.brmo.util.http.wrapper;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.URI;
- import java.net.URLConnection;
- import nl.b3p.brmo.util.http.HttpClientWrapper;
- import nl.b3p.brmo.util.http.HttpResponseWrapper;
- /**
- * Wraps a standard Java HttpURLConnection or HttpsURLConnection.
- *
- * @author Matthijs Laan
- */
- public class URLConnectionHttpClientWrapper
- implements HttpClientWrapper<HttpURLConnection, HttpURLConnection> {
- @Override
- public HttpResponseWrapper request(URI uri, String... requestHeaders) throws IOException {
- URLConnection connection = uri.toURL().openConnection();
- if (!(connection instanceof HttpURLConnection)) {
- throw new IllegalArgumentException("Expected HttpURLConnection instance for URI " + uri);
- }
- HttpURLConnection httpURLConnection = (HttpURLConnection) connection;
- httpURLConnection.setInstanceFollowRedirects(true);
- if (requestHeaders.length % 2 != 0) {
- throw new IllegalArgumentException();
- }
- for (int i = 0; i < requestHeaders.length; i += 2) {
- httpURLConnection.setRequestProperty(requestHeaders[i], requestHeaders[i + 1]);
- }
- beforeRequest(httpURLConnection);
- httpURLConnection.connect();
- return wrapResponse(httpURLConnection);
- }
- /**
- * Called before doing a request, override to modify or log it.
- *
- * @param httpURLConnection The HttpURLConnection that will be used, can be modified
- */
- @Override
- public void beforeRequest(HttpURLConnection httpURLConnection) {}
- /**
- * Wraps a HttpURLConnection after HttpURLConnection.connect() has been called, override to modify
- * or log it.
- *
- * @param httpURLConnection The URL connection to be wrapped
- * @return The wrapped response
- */
- @Override
- public HttpResponseWrapper wrapResponse(HttpURLConnection httpURLConnection) {
- return new HttpResponseWrapper() {
- @Override
- public int getStatusCode() throws IOException {
- return httpURLConnection.getResponseCode();
- }
- @Override
- public String getHeader(String header) {
- return httpURLConnection.getHeaderField(header);
- }
- @Override
- public InputStream getResponseBody() throws IOException {
- return httpURLConnection.getInputStream();
- }
- };
- }
- }