使用“进程”构建器运行cURL命令

时间:2017-05-09 15:18:41

标签: java curl processbuilder

我想在Process Builder中添加以下cURL命令:

curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://********.com

cookiejar.txt是一个Netscape HTTP Cookie文件。

2 个答案:

答案 0 :(得分:1)

我怀疑如何将上面的curl命令放在Process Builder中。 我想到了。 :)

ProcessBuilder pb = new ProcessBuilder("curl", "--negotiate", "-u" ,":" ,"-b", "~/cookiejar.txt", "-c", "~/cookiejar.txt", "http://********.com");
Process p = pb.start();

InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuilder responseStrBuilder = new StringBuilder();

String line = new String();

while ((line = br.readLine()) != null) {
    System.out.println("read line from curl command: " + line);
    responseStrBuilder.append(line);
}

上面的代码对我来说很好。

答案 1 :(得分:0)

没什么特别的:

ProcessBuilder pb = new ProcessBuilder(
     "curl", "--negotiate", "-u", ":", 
     "-b", "~/cookiejar.txt", "-c", "~/cookiejar.txt", 
     "http://********.com");
 pb.redirectErrorStream(true); 
 // other stuff you choose to do to pb -- see ProcessBuilder JavaDoc
 Process p = pb.start();
 try(InputStream response = p.getInputStream()) {
     // read response
 }

redirectErrorStream可以防止您尝试从cUrl的stdout读取问题,而cUrl正在向stderr写入错误。有更聪明但更复杂的方法来保持stderr和stdout分开,但我把这些作为练习留给读者。

然而 - 炮轰外部命令是不好的做法,应该保留,当你真的,真的需要它。这是一种不好的做法,因为它会导致问题 - 你会很乐意避免的问题。所以我建议使用本机Java HTTP客户端。 Apache Commons HttpClient是可靠的,具有您可能需要的所有Cookie处理功能。