MultipartRequest.java
Home
/
src /
main /
java /
br /
ufrgs /
inf /
prosoft /
requestssimulator /
requests /
MultipartRequest.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package br.ufrgs.inf.prosoft.requestssimulator.requests;
import br.ufrgs.inf.prosoft.requestssimulator.Session;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
/**
*
* @author romulo
*/
public class MultipartRequest extends Request {
private final String forms;
protected MultipartRequest(RequestPlan requestPlan, Session session, String URL, String forms) {
super(requestPlan, session, URL);
this.forms = forms;
}
protected MultipartRequest(RequestPlan requestPlan, Session session, String URL, String headers, String forms) {
super(requestPlan, session, URL, headers);
this.forms = forms;
}
protected String getForms() {
return this.forms;
}
public void forEachForm(BiConsumer<? super String, ? super String> forEach) {
Map<String, String> forms = new HashMap<>();
if (this.forms != null) {
String[] formsPairs = this.forms.split("; ");
for (String formPair : formsPairs) {
String[] pair = formPair.split(": ");
forms.put(pair[0], pair[1]);
}
}
forms.forEach(forEach);
}
@Override
public void fire() {
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
HttpPost httpPost = new HttpPost(getURL());
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
forEachForm((key, value) -> {
if (key.equals("file")) {
File file = new File(value);
multipartEntityBuilder.addBinaryBody(key, file);
} else {
multipartEntityBuilder.addTextBody(key, value);
}
});
HttpEntity httpEntity = multipartEntityBuilder.build();
httpPost.setEntity(httpEntity);
forEachHeader((key, value) -> {
value = fillPropertyVariable(value);
httpPost.setHeader(key, value);
});
try (CloseableHttpResponse closeableHttpResponse = httpClient.execute(httpPost)) {
int responseCode = closeableHttpResponse.getStatusLine().getStatusCode();
if (responseCode < 400) {
Logger.getGlobal().log(Level.INFO, "{0} {1}", new Object[]{getMethod(), getURL()});
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(closeableHttpResponse.getEntity().getContent()))) {
String response = bufferedReader.lines().collect(Collectors.joining());
processResponse(response);
}
} else {
Logger.getGlobal().log(Level.SEVERE, "error {0} on {1} {2}", new Object[]{responseCode, getMethod(), getURL()});
}
}
} catch (IOException e) {
Logger.getGlobal().log(Level.SEVERE, "IOException");
}
}
}