@Override
    public void send(final AttributeMap attributeMap,
                     final InputStream inputStream) throws ForwardException {
        if (NullSafe.isEmptyString(attributeMap.get(StandardHeaderArguments.FEED))) {
            throw new StroomStreamException(StroomStatusCode.FEED_MUST_BE_SPECIFIED, attributeMap);
        }

        // We need to add the authentication token to our headers
        final Map<String, String> authHeaders = userIdentityFactory.getServiceUserAuthHeaders();
        attributeMap.putAll(authHeaders);

        attributeMap.computeIfAbsent(StandardHeaderArguments.GUID, k -> UUID.randomUUID().toString());

        LOGGER.debug(() -> LogUtil.message(
                "'{}' - Opening connection, forwardUrl: {}, userAgent: {}, attributeMap (" +
                "values truncated):\n{}",
                forwarderName, forwardUrl, userAgent, formatAttributeMapLogging(attributeMap)));

        final HttpPost httpPost = createHttpPost(attributeMap);

        final ByteCountInputStream byteCountInputStream = new ByteCountInputStream(inputStream);
        httpPost.setEntity(new BasicHttpEntity(
                byteCountInputStream,
                ContentType.create("application/audit"),
                true));

        // Execute and get the response.
        final ResponseStatus responseStatus = sendTimer.timeSupplier(() ->
                post(httpPost, attributeMap, byteCountInputStream::getCount));
        LOGGER.debug("responseStatus: {}", responseStatus);
    }
Handler class that forwards the request to a URL.
stroom-proxy/stroom-proxy-app/src/main/java/stroom/proxy/app/handler/HttpSender.java