最近在研究elasticsearch,用Java运行curl来创建一个快照仓库,在linux和windows下直接运行curl命令都没问题,用java运行就各种报错,curl代码如下
public static void curl(String type, String url) {
String[] cmds = {"curl", type, url};
ProcessBuilder pb = new ProcessBuilder(cmds);
pb.redirectErrorStream(true);
Process p;
try {
p = pb.start();
BufferedReader br = null;
String line = null;
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = br.readLine()) != null) {
System.out.println("\t" + line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
提交的请求如下:
curl -XPUT http://192.168.3.100:9200/_snapshot/back_2/back_6 -d "{\"indices\": \"indexdemo1\"}"
进行了各种转义各种尝试,在java里都无法提交,unmatched brace in column错误,Could not resolve host错误,unmatched close brace/bracket in column错误翻来覆去两天,啥耐心都没了,最后无意中看到一种奇怪的解决办法,把请求地址用引号引用起来,再把-d后的参数用3个引号引用起来,在绝望之中,任何方式都要尝试一下
String url = "\"http://192.168.3.100:9200/_snapshot/back_2/back_133\" -d \"{\"\"\"indices\"\"\": \"\"\"indexdemo1\"\"\"}\"";最后顺利提交......
希望能帮到后面踩坑的朋友