Настройка: я настроил базу данных elasticsearch и создал моментальный снимок. Необязательно знать, что это такое, достаточно знать, что он принимает команды с использованием методов http. Если бы я делал это в консоли, я бы использовал curl. Например, чтобы удалить снимок, я бы использовал
curl -X DELETE "localhost:9200/_snapshot/bck/sn5?pretty"
(? Pretty просто форматирует вывод, иначе все будет в одной строке)
Это даст мне результат например:
{
"error" : {
"root_cause" : [
{
"type" : "snapshot_missing_exception",
"reason" : "[bck:sn5] is missing"
}
],
"type" : "snapshot_missing_exception",
"reason" : "[bck:sn5] is missing"
},
"status" : 404
}
Теперь я пытаюсь сделать это в java. Как я прочитал, мне нужен inputStream для чтения вывода.
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class main {
public static void main(String[] args) throws IOException {
String urlTarget = "http://localhost:9200/_snapshot/bck/sn5";
URL url = new URL(urlTarget);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
InputStream inputStream = connection.getInputStream();
//read the data
}
}
Но это приводит к FileNotFoundException для входящего потока. Тем не менее, я могу распечатать connection.getResponse (), который здесь приводит к «Not Found».
Итак, мой простой вопрос: как я могу прочитать результат, который я вижу с помощью curl в моем java code?
изменить: после предложений о переключении на connection.getErrorStream я получаю исключение NullPointerException, когда хочу инициализировать bufferedReader.
Новый фрагмент:
InputStream inputStream = connection.getErrorStream();
//read the response
BufferedReader rdr = new BufferedReader(new InputStreamReader(inputStream));
String inputLine;
StringBuffer output = new StringBuffer();
while ((inputLine = rdr.readLine()) != null) {
output.append(inputLine + "\n");
}
rdr.close();
Спасибо !