import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpConnectTimeoutException;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

import static java.lang.System.out;

public class Test {

    public static void main(String[] args) {
        try (HttpClient client = HttpClient.newBuilder()
                .proxy(ProxySelector.of(
                        InetSocketAddress.createUnresolved("example.com", 8080)))
                .build()) {

            URI uri = URI.create("https://example.com:81/");

            HttpRequest request = HttpRequest.newBuilder(uri)
                    .version(HttpClient.Version.HTTP_2)
                    .POST(HttpRequest.BodyPublishers.noBody())
                    .timeout(Duration.ofMillis(100))
                    .build();

            HttpResponse<?> response = client.send(request, HttpResponse.BodyHandlers.ofString());

            out.println("ERROR: Unexpected response: " + response);
            out.println("Headers: " + response.headers());
            out.println("Body: " + response.body());
        } catch (HttpConnectTimeoutException expected) {
            out.println("Expected exception: " + expected);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}