I am using Java's ProcessBuilder to execute curl from Java. The same command being executed in bash works just fine, but I get a {"text": "Token is required", "code":2} error from Java.
public String call() throws IOException, InterruptedException {
List<String> command = new ArrayList<>();
command.add("curl");
command.add("-X");
command.add(method.name());
command.add("-k");
command.add(endpoint);
if (headers != null && !headers.isEmpty()) {
StringBuilder builder = new StringBuilder();
headers.keySet().forEach(s -> {
builder.replace(0, builder.length(), "");
builder.append("'").append(s).append(":").append(headers.get(s)).append("'");
command.add("-H");
command.add(builder.toString());
});
}
if (data != null) {
command.add("-d");
command.add("'" + data + "'");
}
System.out.println(StringUtils.join(command, " "));
return doCurl(command.toArray(new String[0]));
}
private String doCurl(String[] args) throws IOException, InterruptedException {
Process process = new ProcessBuilder(args)
.redirectErrorStream(true)
.start();
String lines;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"))) {
lines = reader.lines().collect(Collectors.joining("\n"));
}
process.waitFor();
return lines;
}