Я пишу программу на Java, которая создает команду cURL и выполняет ее.У меня не было никаких проблем, за исключением того, что одна команда не позволит мне направить стандартный вывод в мою программу.Стандартный вывод имеет информацию, необходимую для выполнения будущих команд cURL.
Я использовал команду -o для вывода stdout в файл .txt, но это не сработает, если я не остановлю программу Java сразу после выполнения команды cURL.Я также пробовал несколько разных методов потоковой передачи, но ни одна из них не работает.
К сожалению, API, с которым я общаюсь, требует информацию об учетной записи для выполнения многих команд, но я поделюсь кодом, который не отображает мое имя пользователя и пароль.
Этоэто команда, которая выполняет и возвращает значение, которое мне нужно для будущих команд:
curl -o C:\Users\friza\eclipse-workspace\CanaryCoalMine\birdseed.txt -k -J -X POST -v --include -H "X-gts-token:xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx" https://api.gts.geant.net/taas/api/v2/projects/CanaryCoalMine/types/OneHost/reservations
Это вывод в файл birdseed.txt.Мне нужно пятизначное значение в самом конце:
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Thu, 20 Jun 2019 16:25:07 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.google.com/recaptcha http://www.springframework.org http://java.sun.com/jsp https://www.google.com/jsapi https://www.google.com https://www.gstatic.com code.jquery.com ajax.googleapis.com https://*.bootstrapcdn.com https://*.cloudflare.com; img-src 'self' http://195.113.161.164:* https://www.gstatic.com/recaptcha code.jquery.com; style-src 'self' 'unsafe-inline' https://*.bootstrapcdn.com https://*.cloudflare.com https://fonts.googleapis.com code.jquery.com; font-src 'self' https://themes.googleusercontent.com https://*.bootstrapcdn.com https://*.cloudflare.com; frame-src 'self' 'unsafe-inline' https://www.google.com; object-src 'none'
Expect-CT: enforce; max-age=3600
Strict-Transport-Security: max-age=31622400; includeSubDomains; preload
Referrer-Policy: no-referrer
Feature-Policy: geolocation 'none';midi 'none';notifications 'none';push 'none';sync-xhr 'none';microphone 'none';camera 'none';magnetometer 'none';gyroscope 'none';speaker 'self';vibrate 'none';fullscreen 'self';payment 'none';
10940
Это метод Java, который я использую для выполнения приведенного выше кода:
public static void createType(String tokenHeader, String dslEncoded) {
String curlCommand = "curl -o C:\\Users\\friza\\eclipse-workspace\\CanaryCoalMine\\birdseed.txt -k -J -X POST -v --include -H "+tokenHeader
+" -H \"Content-Type: application/x-www-form-urlencoded\" -d \"script="
+dslEncoded+
"\" https://api.gts.geant.net/taas/api/v2/projects/CanaryCoalMine/types";
try {
//execute Curl Command to create new type
Process process = Runtime.getRuntime().exec(curlCommand);
System.out.println("Creating Type...");
System.out.println("Sent: " + curlCommand);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("IO EXCEPTION :( ");
e.printStackTrace();
}
}
TL; Ожидаемый DR: После выполнения команды cURL я хочу увидеть заданный вывод в файле БЕЗ остановки программы Java, которая выполняет команду.
Фактические результаты: Невозможно увидеть вышеуказанный вывод в файле .txt, пока я не нажму STOPна программе Java.Невозможно продолжить работу с программой, пока я не смогу извлечь из файла последние пять цифр.Потоковая передача невозможна по неизвестной причине.