package requests; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; import java.net.http.HttpHeaders; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpClient.Builder; import java.net.http.HttpClient.Version; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.List; import java.util.Optional; import javax.net.ssl.SSLSession; import exceptions.FailedResponseException; public class POSTRequest extends GETRequest{ String body = ""; Path uploadFile = null; public POSTRequest(String url, String body, String username, String password, long timeout, Path outputFile, String... headers) { super(url, username, password, timeout, outputFile, headers); this.body=body; } public POSTRequest(String url, String body, long timeout, Path outputFile, String... headers) { super(url, timeout, outputFile, headers); this.body=body; } public POSTRequest(String url, String body, long timeout, String... headers) { super(url, timeout, headers); this.body=body; } public POSTRequest(String url, String body) { super(url); this.body=body; } public POSTRequest(String url, Path uploadFile) { super(url); this.uploadFile=uploadFile; } @Override public HttpResponse run() throws FailedResponseException { if (uploadFile!=null) { String charset = "ISO-8859-1"; File file = uploadFile.toFile(); String requestURL = url; try { MultipartUtility multipart = new MultipartUtility(requestURL, charset); multipart.addHeaderField("User-Agent", "SIG HTTPCLIENT"); multipart.addFilePart("fileUpload", file); List response = multipart.finish(); return new HttpResponse(){ @Override public int statusCode() { return 0; } @Override public HttpRequest request() { return null; } @Override public Optional> previousResponse() { return null; } @Override public HttpHeaders headers() { return null; } @Override public String body() { StringBuilder sb = new StringBuilder(); for (String s : response) { sb.append(s); } return sb.toString(); } @Override public Optional sslSession() { return null; } @Override public URI uri() { return null; } @Override public Version version() { return null; } }; } catch (IOException ex) { System.err.println(ex); throw new FailedResponseException("Could not send response for POST File upload. THIS SHOULD NOT BE HAPPENING!"); } } else { return super.run(); } } @Override protected java.net.http.HttpRequest.Builder finalizeRequestPreBuild( java.net.http.HttpRequest.Builder requestBuild) throws FailedResponseException{ requestBuild.headers("Content-Type","application/json"); try { return file!=null?requestBuild.POST(HttpRequest.BodyPublishers.ofFile(file)): body.length()>0?requestBuild.POST(HttpRequest.BodyPublishers.ofString(body)): requestBuild.POST(HttpRequest.BodyPublishers.noBody()); } catch (FileNotFoundException e) { e.printStackTrace(); } throw new FailedResponseException("Could not complete request build. THIS SHOULD NOT BE HAPPENING!"); } @Override protected Builder finalizeClientPreBuild(Builder clientBuild) { return clientBuild; } }