使用HttpURLConnection读取弹性搜索的输出时出现FileNotFoundException



设置:我已经设置了一个弹性搜索数据库并创建了一个快照。不需要知道它是什么,只要知道它使用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()

相关内容

  • 没有找到相关文章

最新更新