import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse.BodyHandlers; import java.nio.file.Path; public class MultipartBodyPublisherRawTest { static final String CRLF = "\r\n"; static final String BOUNDARY = "gc0p4Jq0M2Yt08jU534c0p"; static final String BOUNDARY_START = "--"; static final String BOUNDARY_END = "--"; public static void main(String... args) throws Exception { // # using raw concat only ! var publisher = HttpRequest.BodyPublishers.concat( // preamble HttpRequest.BodyPublishers.ofString(CRLF + BOUNDARY_START + BOUNDARY + CRLF + "Content-Type: text/plain; charset=us-ascii" + CRLF), HttpRequest.BodyPublishers.ofFile(Path.of("/tmp/xxyy")), HttpRequest.BodyPublishers.ofString(CRLF + BOUNDARY_START + BOUNDARY + BOUNDARY_END) // epilogue ); var client = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(URI.create("http://foo.com/")) .header("Content-Type", "multipart/mixed; boundary=" + BOUNDARY) .POST(publisher) .build(); client.send(request, BodyHandlers.ofString()); } }