잡동사니

반응형

질문

다음은 Java에서 POST 요청에 대한 내 컬입니다.

String payload1 = "curl --location --request POST 'https://some_url/abc' \\\n" +
                    "--header 'Api-Key: RIQOWU-9asds943msd9d934nmwdw0d' \\\n" +
                    "--header 'Content-Type: application/json' \\\n" +
                    "--header 'BarId: di292sdk/dmasdaskdnasd934n3sda0334n5Yz1QlVnnTmJ39U4aJT8/9sdns/Xwpen/asdksaeibwae+292nsadsaweg3ARyWwAA0LuSDIL3s+A/EVkLoVhc=' \\\n" +
                    "--header 'Accept: application/json;v=2' \\\n" +
                    "--header 'Cookie: JSESSIONID=9SDKSDSD9M23B4D46BF663F2B51E75137' \\\n" +
                    "--data-raw '{\n" +
                    "\"AU\": \"EC\",\n" +
                    "    \"is\": \"is\",\n" +
                    "    \"ls\": \"js\",\n" +
                    "    \"Timestamp\": \"2021-06-26T18:43:00Z\"\n" +
                    "}'";
            ProcessBuilder process = new ProcessBuilder(payload1);
            Process p;
            p = process.start();

다음은 응답의 관련 데이터입니다.

java.io.IOException: Cannot run program "/usr/local/Cellar/curl/7.71.1/bin/curl.exe --location --request POST '..........
: error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at com.aws.s3.service.EntryPoint.POSTAPI(EntryPoint.java:343)
    at com.aws.s3.service.EntryPoint.main(EntryPoint.java:72)
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)
    ... 2 more

Process finished with exit code 0

나는 아래와 같이 String에서 curl의 경로를 언급하려고 시도했지만 여전히 동일한 오류가 발생합니다.

String payload1 = "/usr/local/Cellar/curl/7.71.1/bin/curl.exe "+"--location --request POST......above payload......"

Java에서 curl 명령을 해석하지 못하는 원인이 무엇인지 알려주십시오. 매우 감사히 생각한다!!


답변1

curl 경로가 정확합니까? ".exe"로 끝나나요? Mac 버전에는 ".exe"가 없다고 생각했을 것입니다. 다음을 사용하여 호출에 사용 된 실행 경로를 확인합니다.

 File curl = new File("/usr/local/Cellar/curl/7.71.1/bin/curl"); 
 System.out.println("curl.exists()="+curl.exists());
 System.out.println("Files.isExecutable()="+Files.isExecutable(curl.toPath()));

Runtime.exec에는 Runtime.exec (String) 이 있지만 ProcessBuilder (String ...) 가있는 ProcessBuilder (String) 는 없습니다. 매개 변수가 String []으로 복잡하게 전환되기 때문에 명령 내부의 구두점 문제를 배제하여 줄 연속 값 \\\ n 이 필요하지 않습니다.

 String [] payload1 = new String[] { curl.getAbsolutePath(), 
       "--location", "--request", "POST"
     , "https://some_url/abc"
     , "--header", "Api-Key: RIQOWU-9asds943msd9d934nmwdw0d"
     
 ... etc

     , "--data-raw", "{\n" +
                "\"AU\": \"EC\",\n" +
                "    \"is\": \"is\",\n" +
                "    \"ls\": \"js\",\n" +
                "    \"Timestamp\": \"2021-06-26T18:43:00Z\"\n" +
                "}"
 };

이제 파이프 오류가 있으므로 getOutputstream 프로세스에 데이터를 보내면 해당 데이터를 close ()하고 이상적으로는 다음을 사용하여 프로세스 출력 및 오류 스트림을 파일로 리디렉션해야합니다.

process.redirectOutput (파일);process.redirectError (파일) :



 

 

 

 

출처 : https://stackoverflow.com/questions/63025469/i-am-having-below-error-while-running-curl-command-using-java-in-mac-where-it-gi

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band