В моем случае определенный HTTP-запрос будет работать в curl в Git Bash на Windows.Тем не менее, я получил бы ошибку сброса подключения при запуске на Java с использованием HttpClient и HttpGet (org.apache.http.client.methods.HttpGet).
Если бы я попытался использовать exec для прямого запуска командыпо какой-то причине он не будет работать.
В качестве обходного пути этот код запишет команду в пакетный файл, затем запустит пакетный файл и поместит вывод в command.txt.
Здеськоманда, которая должна быть в файле command.bat (я изменил конечную точку и пароль):
"C:\Users\scottizu\AppData\Local\Programs\Git\bin\sh.exe" --login -i -c "curl 'https://my.server.com/validate/user/scottizu' -H 'Password: MY_PASSWORD' > command.txt"
Вот код (обратите внимание, что в команде экранированы специальные символы):
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class CURL_Runner {
public static void main (String[] args) throws Exception {
String command = "\"C:\\Users\\scottizu\\AppData\\Local\\Programs\\Git\\bin\\sh.exe\" --login -i -c \"curl 'https://my.server.com/validate/user/scottizu' -H 'Password: MY_PASSWORD' > command.txt\"";
createAndExecuteBatchFile(command);
}
public static void createAndExecuteBatchFile(String command) throws Exception {
// Step 1: Write command in command.bat
File fileToUpload = new File("C:\\command.bat");
try {
if(fileToUpload.getParentFile() != null && !fileToUpload.exists()) {
fileToUpload.getParentFile().mkdirs();
}
FileWriter fw = new FileWriter(fileToUpload);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(command);
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
// Step 2: Execute command.bat
String[] cmdArray = new String[1];
cmdArray[0] = "C:\\command.bat";
Process process = Runtime.getRuntime().exec(cmdArray, null, new File("C:\\"));
int processComplete = process.waitFor();
}
}