Below is a form:
I recently released a library providing useful extensions to Java 11's HttpClient. The library contains a MultipartBodyPublisher with a convenient and easy to use MultipartBodyPublisher.Builder. Here is an example using it (JDK11 or later is required):
MultipartBodyPublisher multipartBody = MultipartBodyPublisher.newBuilder()
.textPart("foo", "foo_text")
.filePart("bar", Path.of("path/to/file.txt"))
.formPart("baz", BodyPublishers.ofInputStream(() -> ...))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/"))
.POST(multipartBody)
.build();
Note that you can also add any BodyPublisher (or HttpHeaders) you want. See the user guide for more details.