我想在Process Builder中添加以下cURL命令:
curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://********.com
cookiejar.txt是一个Netscape HTTP Cookie文件。
答案 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处理功能。