设置:我已经设置了一个弹性搜索数据库并创建了一个快照。不需要知道它是什么,只要知道它使用http方法接收命令就足够了。如果我在控制台上做,我会使用卷曲。例如,要删除快照,我会使用
curl -X DELETE "localhost:9200/_snapshot/bck/sn5?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((,这会导致"未找到"。
所以,我的简单问题是,如何读取java代码中使用curl可以看到的输出?
edit:在建议切换到connection.getErrorStream之后,当我想初始化bufferedReader时,我得到了一个NullPointerException。
新片段:
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();
谢谢!
您从getInputStream()
获得FileNotFoundException
,因为服务器使用HTTP 404进行响应,这实际上是"找不到文件">
如果您想读取响应正文,而不管HTTP错误状态如何,请在HttpURLConnection
对象上调用getErrorStream()
,而不是getInputStream()
。