[英]Java.io.IOException: error=2, No such file or directory on executing curl in java
我正在使用curl進行基於證書的/ x509身份驗證
String command = "curl --cert " +certificateFilePath+" --key "+ certificateKeyFilePath+" --insecure "+authUrl;
ProcessBuilder process = new ProcessBuilder(command);
Process p;
try
{
p = process.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
while ( (line = reader.readLine()) != null) {
builder.append(line);
builder.append(System.getProperty("line.separator"));
}
String result = builder.toString();
System.out.print("result ------------------: "+result);
}catch(Exception e){
e.printStackTrace();
}
`
但得到例外
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
`
鑒於應用程序和身份驗證服務在Ubuntu上的docker-container內部運行,並且當我手動進入應用程序docker-container並執行上述curl命令時,可以正常工作。 請幫忙
從流程構建器文檔中:
https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html
正確的方法是使用作為單獨字符串傳遞的參數來調用它,否則它將不起作用。 同樣,為了在linux中運行curl
或在Windows中運行dir
等系統命令,您需要調用命令解釋程序-sh for linux。 因此,您的命令應如下所示:
ProcessBuilder process = new ProcessBuilder("sh", "-c","curl","--cert", certificationPath......);
或者您可以嘗試:
Runtime.getRuntime().exec(command); //Here you pass the whole command as a string
您是否可以嘗試在root用戶下或使用sudo java運行JVM。...它可能沒有足夠的JVM權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.